Menggunakan Swift Singleton

Saya punya kelas Singleton berikut:

class Singleton {
    static let sharedInstance = Singleton()
}

Saya hanya dapat menemukan sedikit informasi online tentang cara menggunakan berbagai implementasi cepat dari pola Singleton. Saya telah menggunakannya sebelumnya di Objective-C pada aplikasi sebelumnya tetapi bagi saya itu tampak jauh lebih mudah.

Misalnya, jika saya ingin membuat array objek khusus yang dapat digunakan di mana saja dalam aplikasi, bagaimana cara mendeklarasikannya, dan bagaimana cara mengimplementasikannya. Di kelas Singleton objektif-C saya, saya membuat variabel global di file kelas, dan kemudian mengimplementasikannya seperti ini:

singletonClass *mySingleton = [singletonClass sharedsingletonClass];
mySingleton.whatever = "blaaaah"

Saya menghargai bantuannya! Saya juga baru di sini dan baru mengenal Swift.


person Alex Cauthen    schedule 18.01.2016    source sumber


Jawaban (2)


Ada banyak info tersedia tentang lajang di Swift. Pernahkah Anda menemukan artikel ini dengan kehebatan Google Anda? http://krakendev.io/blog/the-right-way-to-write-a-singleton

Namun untuk menjawab pertanyaan Anda, Anda cukup menentukan apa pun yang ingin Anda gunakan secara normal.

class Singleton {
    static let sharedInstance = Singleton() // this makes singletons easy in Swift
    var stringArray = [String]()

}

let sharedSingleton = Singleton.sharedInstance

sharedSingleton.stringArray.append("blaaaah") // ["blaaaah"]

let anotherReferenceToSharedSingleton = Singleton.sharedInstance

print(anotherReferenceToSharedSingleton.stringArray) // "["blaaaah"]\n"
person Andrew Sowers    schedule 18.01.2016
comment
Sebenarnya dari situlah saya mendapatkan kode saya, namun artikel ini lebih merupakan analisis setiap metode daripada menjelaskan apa yang sedang terjadi. Hargai bantuannya. - person Alex Cauthen; 19.01.2016
comment
Bukan masalah! Dalam hal ini, postingan ini mungkin berguna bagi Anda: github.com/hpique/SwiftSingleton - person Andrew Sowers; 19.01.2016

Setuju dengan Andrew Sowers. Ingatlah bahwa Anda juga harus mendeklarasikan penginisialisasi pribadi seperti ini:

class Singleton: NSObject {
    static let sharedInstance = Singleton()
    private override init() {}
}

Tanpa init() pribadi ini, objek lain dapat membuat instance mereka sendiri:

let mySingleton = Singleton()

Sekarang ada dua instance, Singleton.sharedInstance dan mySingleton - bukan lagi singleton! Saya menemukan ini melalui bug buruk di mana beberapa "lajang" mengaktifkan pengatur waktu dan menimbulkan kekacauan.

person Jeff Sorrentino    schedule 02.03.2019