Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用属性-Swift初始化单例?_Swift_Swift3_Singleton - Fatal编程技术网

如何使用属性-Swift初始化单例?

如何使用属性-Swift初始化单例?,swift,swift3,singleton,Swift,Swift3,Singleton,我正在尝试创建一个使用属性初始化的单例。。我知道您可以默认初始化: class ApiSharedHelper { var someValue:String static let sharedInstance : ApiSharedHelper = { let instance = ApiSharedHelper() return instance }() ApiSharedHelper.sharedInstance...

我正在尝试创建一个使用属性初始化的单例。。我知道您可以默认初始化:

class ApiSharedHelper {
    var someValue:String    

    static let sharedInstance : ApiSharedHelper = {
        let instance = ApiSharedHelper()
        return instance
    }()


ApiSharedHelper.sharedInstance...
我只需要调用sharedInstance,它就会调用构造函数。在传递
someValue
字符串的值以初始化值时,如何调用该共享实例

class APIManager {

    class var shared :APIManager {
        struct Singleton {
            static let instance = APIManager()
        }
        return Singleton.instance
    }

    func login(username: String, password: String, success:@escaping (LoginModel?)->()) { ... }
您可以通过以下方式调用它:

APIManager.shared.login(username: txtUsername.text ?? "", password: txtPassword.text ?? "") { (response) in
            print(response ?? "")
    }
您可以通过以下方式调用它:

APIManager.shared.login(username: txtUsername.text ?? "", password: txtPassword.text ?? "") { (response) in
            print(response ?? "")
    }
你可以试试这个

class ApiSharedHelper {
    var someValue:String    
    static let sharedInstance = ApiSharedHelper()
    private init(){
    }
}

ApiSharedHelper.sharedInstance...
你可以试试这个

class ApiSharedHelper {
    var someValue:String    
    static let sharedInstance = ApiSharedHelper()
    private init(){
    }
}

ApiSharedHelper.sharedInstance...

这是一个坏主意,因为你永远不知道“singleton”是否已经用不同的参数提前初始化了如果您需要依赖于某些参数的帮助程序,那么不要使用单例(或者,我更喜欢“共享实例”),每个对象都有自己的属性和行为,如果您想更改属性值,那么只需使用其sharedInstance即可。如果你想在初始化时赋值,那么你可以在
sharedInstance
块中赋值。@MartinR是的,这就是为什么我想知道如何从一开始就用值初始化一个单例,并声明属性w/let,这样它们就不会被修改。这是个坏主意,因为你永远不知道“单例”是否已使用不同的参数在前面初始化如果您需要依赖于某些参数的帮助程序,那么不要使用单例(或者,我更喜欢“共享实例”),每个对象都有自己的属性和行为,如果您想更改属性值,那么只需使用其sharedInstance即可。如果你想在初始化时赋值,那么你可以在
sharedInstance
块中赋值。@MartinR是的,这就是为什么我想知道如何从一开始就用值初始化一个单例,并声明属性w/let,这样它们就不会被修改..如果不将初始值设置为私有,您不能确保
sharedInstance
将是单例。初始化时它不会得到任何值。您可以在private init中提供默认值,而无需将初始值设定为private,您不能确保
sharedInstance
将是单例。初始化时它不会得到任何值。您可以在private init中提供默认值