【发布时间】:2016-04-11 02:08:10
【问题描述】:
所以这真的很令人沮丧。我正在尝试使用单例来传递字符串变量,但它没有在第二个 UIViewController 上传递。
Singleton.swift:
class CardName {
var cardName : String = ""
class var sharedInstance : CardName {
struct Static {
static let instance : CardName = CardName()
}
return Static.instance
}
var returnedCardName : String {
get{
return self.cardName
}
set {
self.cardName = newValue
}
}}
查看 1:
CardName.sharedInstance.returnedCardName = "Single pass test"
print("Shared instance name set: \(CardName.sharedInstance.returnedCardName)")
print() 成功显示正确设置的字符串。
查看 2:
let card_name_shared = CardName.sharedInstance
override func viewDidLoad() {
super.viewDidLoad()
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
card_Name = card_name_shared.returnedCardName
print("Passed Card Name: \(self.card_name_shared.returnedCardName)")
}
查看 2 个 print() 结果:
Passed Card Name:
我有这个设置与其他一些视图完全相同的方式,但我不知道为什么它不起作用。
我用
self.performSegueWithIdentifier("segue", sender: nil)
移动到下一个视图。不知道跟这个有没有关系。
我不明白 override func prepareForSegue 是如何工作的,或者它是否有帮助。
【问题讨论】:
-
在你的印刷品中简单地使用 card_Name (没有 self. )。静态并不意味着恒常。可能您的 card_name_shared constance 是在 .returnedCardName 设置为您的字符串之前创建的
-
您可以只在prepareForSegue 中传递您提到的数据,而不是使用全局单例。下面是它如何工作的示例:stackoverflow.com/a/29360924/215400