带参数的快速单例

时间:2018-09-18 23:40:52

标签: swift

我是新手,很快就四处搜寻,但找不到任何令人满意的答案。我想有一个可以用一些变量初始化的Singleton类实例。例如

public class Singleton {
   var car: String
   var bus: String

   init(car: String, bus: String) {
    self.car = car
    self.car = bus
   }

   func drive() {
       print("I will drive")
   }
}


public class SingletonConsumer {
  // create an instance of Singleton Once
  var driver: Singleton = Singleton(car: "honda", bus: "volvo")
  driver.drive()
}



public class driverClassWorld : SingletonConsumer {
   driver.drive()
}

我该如何实现?我尝试了协议,但遇到的问题是如何使用参数实例化单例类。

1 个答案:

答案 0 :(得分:0)

我没有这个问题吗?

首先从大脑中移除单身人士一会儿。因为我认为您对什么是单身人士有错误的认识。

现在让我们重新表述您的问题:“如何使用参数实例化类”

是这样的:

import Foundation

class Test {

    let someText : String!

    init(something:String){
        someText = something
    }

    func test(){
        print("TEST \(someText)")
    }
}

let a = Test(something: "Me")
a.test()

输出:

TEST Optional("Me")

您只需要使用所需的参数定义一个初始化。

现在可以正确地实例化一个单例(基本上只是上面的类,但是单个实例)。有很多方法,旧的Objective C方法仍然有效。

但是为了快速起见,这是最常见的模式。您需要定义一个静态属性。

示例:

import Foundation

class Test {

    static let shared = Test(something: "REAL SINGLETON")

    let someText : String!

    init(something:String){
        someText = something
    }

    func test(){
        print("TEST \(someText)")
    }
}

Test.shared.test()

输出:

TEST Optional("REAL SINGLETON")

现在重新读取单例的定义:

  

单例类是只能有一个对象(   一次)

对于声明单例的其他模式:

https://cocoacasts.com/what-is-a-singleton-and-how-to-create-one-in-swift

现在,您可能想知道:此单例实例何时实例化?

  

答案:第一次使用/调用它的时间。