簡體   English   中英

Swift-創建類型為Array的自定義類

[英]Swift - create custom class of type `Array`

如何快速創建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!
    }
}

要創建Car的單例數組,您無需創建新類-只需帶有靜態成員的結構即可:

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

請注意, sharedInstance初始化一次-閱讀此答案以獲取更多信息

附錄

如果要使用MyCars引用Car數組,則可以只定義一個類型別名,並為包含單例的結構使用其他名稱,例如:

typealias MyCars = Array<Car>

struct Singleton {
    static var myCars = MyCars()
}

據我了解,單例表示一個類或結構,對於該類或結構,只能有一個實例。 即使有人嘗試實例化單例的新副本,他們也會以指向唯一實例的指針結束。 (我是從《 Big Nerd Ranch指南》(iOS編程)中得到這個想法的,但似乎沒有爭議)。 我認為上面提出的struct解決方案不符合此標准。 例如,在操場上創建建議的結構(我已將“字符串”類型替換為“汽車”類型以簡化測試):

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 

因此,在Playground環境中,不會使用帶有靜態var的結構的單例。 這很不幸,因為否則它將是實現單例數組的非常簡單的方法。 我在這個問題上遇到了很大的困難。 這篇文章已經闡明了部分解決方案。 在此解決方案中,您確實使用下標引用了單例(因此,單例有點像數組)。 但是缺少其他陣列功能(例如常規分配)。 也就是說,您不能使用以下內容:

MySingletonClass.sharedInstance = [“格拉納達”,“賓托”,“雪佛蘭”]

注意:我是Swift的新手。 上述主張沒有太多權威。 從Swift 1.1到Swift 1.2在定義單例方面都有改變,這些改變總結在這里 Swift 1.1用來定義單例的機制令人困惑,但是Martin Rue 在這里闡明了一個非常易讀的分步開發。

祝好運! - 喬治

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM