Swift 从函数中获取值

Swift Get value from function

我有两个 class,我想得到一个变量,它的值(变量在一个函数中)到我的第二个 class:

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

class RadioViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

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

问题是 var 中间体没有改变,也没有得到结果的值(在我的第一个 class 中)

self.intermediate 是一个 NSString 而结果是一个 String

尝试

self.intermediate = result as NSString

我已将您的 StreamPlayer class 代码复制到 playground 中。我刚刚注释掉了 matchesForRegexIn 方法,因为它似乎是您的字符串扩展,所以我的代码如下所示:

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。如果我是你,我会把 intermediate 声明为 String?