当前位置:  开发笔记 > IOS > 正文

Swift-使用单例共享变量-不传递

如何解决《Swift-使用单例共享变量-不传递》经验,为你挑选了1个好方法。

所以这真令人沮丧。我正在尝试使用单例传递字符串变量,但它没有在第二个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)

移至下一个视图。我不知道这是否与它有关。

我不了解覆写func prepareForSegue的工作原理或是否有帮助。



1> Luca Angelet..:

回答

您确定要写入值读取它吗?

请检查添加断点。

它这是你可以在阅读从移动问题viewDidLoadviewDidAppear

少即是多

Singleton在工作

// from my Playground
CardName.sharedInstance.returnedCardName = "123"
CardName.sharedInstance.returnedCardName // "123"

但是确实包含许多无用和冗余的代码:D

这是一个更好的版本

class CardName {
    static var sharedInstance = CardName()
    private init() {}

    var cardName: String?
}

请使用

CardName.sharedInstance.cardName = "something"

保存一个值。

CardName.sharedInstance.cardName

读取该值。

可选属性

如您所见,新属性声明为Optional String。这意味着它可以包含nil。与String您使用的空值相比,这是一种更好的表示缺少价值的方法。

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有