斯威夫特 - 创建自定义类类型的`Array`(Swift - create custom clas

2019-09-27 09:07发布

我怎样才能创建一个快捷的自定义类是类型的Array ? 确切的说,我有一个自定义类类型的Car ,现在我想创建一个单是数组Car秒。 (因为我希望能够从任何地方访问它在我的应用程序)。

我的解决方法是定义我的单身作为NSMutableArray 。 但我看到了导致我的代码我的一些问题。 所以,我希望将它定义为迅速阵列。 我该怎么做?

我的代码是现在:

class MyCars: NSMutableArray {
    class var sharedInstance: MyCars {
        struct Static {
            static var instance: MyCars?
            static var token: dispatch_once_t = 0
        }

        dispatch_once(&Static.token) {
            Static.instance = MyCars()
        }

        return Static.instance!
    }
}

Answer 1:

要创建的单阵列Car ,你并不需要创建一个新类-只是一个静态成员的结构:

struct MyCars {
    static var sharedInstance = Array<Car>()
}

需要注意的是sharedInstance被初始化一次-读这个答案为更多信息

附录

如果你想使用MyCars引用数组Car ,你可以定义一个typealias和含有单,如结构使用不同的名称:

typealias MyCars = Array<Car>

struct Singleton {
    static var myCars = MyCars()
}


Answer 2:

据我了解,单身代表一个类或结构,这只能有一个实例,直到永远。 即使有人试图实例单身的新副本,他们将与指针风回的唯一实例。 (我从大书呆子牧场指南到iOS编程这个想法,但它似乎没有争议)。 我不认为上面提出的结构解决方案符合这一标准。 例如,在一个操场上创建的建议结构(我已经取代“串”的“车”型类型,使测试更加简单):

struct MyCars {
    static var sharedInstance = Array<String>()
}

然后初始化结构,并显示初始化“花”:

MyCars.sharedInstance = ["Granada", "Pinto", "Chevette"]
println( MyCars.sharedInstance )
// prints all three car names

现在尝试创建数据的副本,并显示它的工作原理,然后修改副本:

var myCars = MyCars.sharedInstance
println( myCars )
// the above prints all three cars
myCars.append("Gremlin")

难道这两个变量指向不同的集合? 测试:

println( MyCars.sharedInstance )
// the above prints three cars
println( myCars )
// the above prints four cars 

所以,在游乐场的环境你不使用结构与静止无功拿到单。 这是不幸的,因为它本来是实行单阵列非常简单的方法。 我在这个问题很大的困难。 的部分解决方案已在此已经阐明了岗位 。 在这个解决方案你去参考使用单标(所以单是有点类似数组)。 但其它阵列的特征(例如正常分配)丢失。 也就是说,你不能使用下列内容:

MySingletonClass.sharedInstance = [ “格林纳达”, “平托”, “克尔维特”]

注:我是很新,雨燕; 上述说法不携带多的权力。 有变化,单身是如何定义将会从雨燕1.1至1.2雨燕以及这些变化归纳在这里 。 使用雨燕1.1定义单身的机制是混乱的,但马丁街有一个非常可读的,一步一步的发展阐述了这里 。

祝好运! - 乔治



文章来源: Swift - create custom class of type `Array`