我有两个类,我想给第二个类赋一个带有值的变量(该变量在函数中):

public class StreamPlayer {

    class var sharedInstance : StreamPlayer{
        struct Static {
            static let instance : StreamPlayer = StreamPlayer()
        }
        return Static.instance
    }

    public var intermediate = NSString()

    func metaDataUpdated(metaData : NSString){
        var result : String = ""
        var listItems = metaData.componentsSeparatedByString(";") as [String]
        if (listItems.count > 0){
            var containerName = listItems[0]
            result =  "StreamTitle=\'([^\"]*)\'".matchesForRegexIn(containerName, atRangeIndex: 1)

            self.intermediate = result
        }

   }
}


第二类

class RadioViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        println(test + StreamPlayer.sharedInstance.intermediate)
     }
}


问题是var中间层没有变化,也没有得到result的值(在我的第一堂课中)

最佳答案

我已经将您的StreamPlayer类代码复制到了操场上。我刚刚注释掉了matchsForRegexIn方法,因为它似乎是您的String扩展,所以我的代码如下所示:

public class StreamPlayer {

  class var sharedInstance : StreamPlayer{
    struct Static {
      static let instance : StreamPlayer = StreamPlayer()
    }
    return Static.instance
  }

  public var intermediate = String()

  func metaDataUpdated(metaData : NSString){
    var result : String = ""
    let listItems = metaData.componentsSeparatedByString(";") as [String]
    if (listItems.count > 0){
      // var containerName = listItems[0]
      result = "StreamTitle=\'([^\"]*)\'" //.matchesForRegexIn(containerName, atRangeIndex: 1)
      intermediate = result
    }
  }
}

// calling the method to make sure intermediate gets updated
StreamPlayer.sharedInstance.metaDataUpdated("asd")
// check if it got updated
print(StreamPlayer.sharedInstance.intermediate)


最后一行显示StreamTitle = \'([[^ \“])\'**,所以一切都很好。只需确保在检查中间变量之前调用StreamPlayer.sharedInstance.metaDataUpdated

PS。我真的不确定您要通过将函数的中间结果共享给外部世界来尝试实现什么,但是感觉还不错。考虑将metaDataUpdated方法拆分为两个方法吗?

PPS。 metaDataUpdated对于函数来说真的是个坏名字

PPPS。如果我是我,我会宣布中间体为String吗?

09-28 14:29