Swift从功能中获取价值

时间:2015-10-12 19:02:21

标签: swift class static var

我有两个类,我希望得到一个带有值的变量(变量在函数中)到我的第二个类:

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中间版没有改变,也没有得到结果的值(在我的第一堂课中)

2 个答案:

答案 0 :(得分:1)

我已将您的StreamPlayer类代码复制到游乐场。我刚刚注释掉了 matchesForRegexIn 方法,因为它似乎是你的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 = \'([^ \"] )\' *所以一切都很好。只需确保在检查 intermediate 之前调用 StreamPlayer.sharedInstance.metaDataUpdated

PS。我真的不确定你是通过将一个功能的中间结果分享到外部世界来实现的,但感觉不对。考虑将 metaDataUpdated 方法拆分为两种方法吗?

PPS。 metaDataUpdated是一个非常糟糕的函数名称

PPPS。如果我是你,我将中间声明为String?

答案 1 :(得分:0)

self.intermediate是一个NSString,而result是一个String

尝试

self.intermediate = result as NSString