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?
我有两个 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?