Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
Arrays Swift-创建“数组”类型的自定义类`_Arrays_Swift_Singleton - Fatal编程技术网

Arrays Swift-创建“数组”类型的自定义类`

Arrays Swift-创建“数组”类型的自定义类`,arrays,swift,singleton,Arrays,Swift,Singleton,如何在swift中创建类型为Array的自定义类? 确切地说,我有一个类型为Car的自定义类,现在我想创建一个singleton,它是Car的数组。(因为我希望能够从应用程序中的任何位置访问它) 我的解决方法是将我的单例定义为NSMutableArray。但我发现这会导致我的代码出现一些问题。所以我想把它定义为swift数组。 我怎么做 我现在的代码是: class MyCars: NSMutableArray { class var sharedInstance: MyCars {

如何在swift中创建类型为
Array
的自定义类? 确切地说,我有一个类型为
Car
的自定义类,现在我想创建一个singleton,它是
Car
的数组。(因为我希望能够从应用程序中的任何位置访问它)

我的解决方法是将我的单例定义为
NSMutableArray
。但我发现这会导致我的代码出现一些问题。所以我想把它定义为swift数组。 我怎么做

我现在的代码是:

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!
    }
}

要创建
Car
的单例数组,无需创建新类,只需创建一个带有静态成员的结构:

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

据我所知,单例表示一个类或结构,其中只能有一个实例。即使有人试图实例化singleton的一个新副本,他们最终也会得到一个指向唯一实例的指针。(我是从《iOS编程大书呆子牧场指南》中得到这个想法的,但它似乎没有引起争议)。我认为上面提出的struct解决方案不符合这个标准。例如,在操场中创建建议的结构(我已经用“String”类型替换了“Car”类型以使测试更容易):

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

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=[“格拉纳达”、“平托”、“切维特”]

注意:我对斯威夫特很陌生;上述断言没有多少权威性。从Swift 1.1到Swift 1.2,单例的定义发生了变化,并对这些变化进行了总结。Swift 1.1用于定义单例的机制令人困惑,但Martin Rue有一个非常可读的、逐步开发的过程

祝你好运!
-George

Swift数组是以struct实现的,struct不支持继承-所以不可能我所做的是最好的方法吗?有没有其他方法可以获得我想要的功能?为什么需要继承?想要添加新方法还是覆盖现有方法?不。我只想要一个单件,它是我的
汽车
数组。但是我认为
NSMutableArray
做得并不完美。…@roi.holtzman您最终使用了什么?我也有同样的想法,我有一个自定义类访问者,我喜欢数组列表访问者。我也碰到了单身汉,但不确定这是不是一条路。就我而言,我喜欢从列表中添加/删除访客。你介意分享你的实际解决方案吗?我得到一个错误:
NSArray不是MyCars的子类型
。你知道如何修复它吗?我现在的代码是:
classmycars{classvar sharedInstance:MyCars{struct Singleton{static var instance=Array()}return Singleton.instance}
如果你需要这个类来做其他事情,那么它看起来不太好。如果它只是一个仅用于静态属性的容器,那么我认为该结构更好—无需编写代码:),但我有该结构。我想我应该这样写,这样我就有一个单身汉了。你不知道我为什么会犯我提到的错误?很抱歉没有看到你的第一条评论。你怎么会犯这个错误的?请记住,您必须以
MyCars.sharedInstance
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