【问题标题】:Swift Get value from functionSwift 从函数中获取价值
【发布时间】:2016-01-10 08:38:10
【问题描述】:

我有两个班级,我想获得一个带有值的变量(该变量在一个函数中)到我的第二个班级:

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 中间没有改变并且没有得到结果的值(在我的第一个类中)

【问题讨论】:

  • 你确定 listItems.count > 0 了吗?
  • 你永远不会调用函数metaDataUpdated
  • 是的,我已经 println 结果,它得到了我想要的,问题是将结果存入中间,
  • metaDataUpdated 被另一个函数使用
  • 你确定结果是否有价值?

标签: swift class static var


【解决方案1】:

self.intermediate 是一个 NSString 而 result 是一个字符串

试试

self.intermediate = result as NSString

【讨论】:

    【解决方案2】:

    我已将您的 StreamPlayer 类代码复制到 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 是一个非常糟糕的函数名称

    购买力平价。如果我是你,我会将中间声明为 String?

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多