การใช้ Swift Singleton

ฉันมีคลาส Singleton ต่อไปนี้:

class Singleton {
    static let sharedInstance = Singleton()
}

ฉันพบข้อมูลออนไลน์น้อยมากเกี่ยวกับวิธีการใช้งานรูปแบบ Singleton อย่างรวดเร็วมากมาย ฉันเคยใช้มันมาก่อนใน Objective-C ในแอปพลิเคชันก่อนหน้า แต่สำหรับฉันมันดูตรงไปตรงมามากกว่ามาก

ตัวอย่างเช่น หากฉันต้องการสร้างอาร์เรย์ของออบเจ็กต์แบบกำหนดเองที่สามารถใช้งานได้ทุกที่ในแอปพลิเคชัน ฉันจะประกาศอย่างไร และฉันจะนำไปใช้อย่างไร ในคลาส Object-C Singleton ของฉัน ฉันสร้างตัวแปรส่วนกลางในไฟล์คลาส จากนั้นนำไปใช้ดังนี้:

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

ฉันขอขอบคุณความช่วยเหลือ! นอกจากนี้ฉันยังใหม่ที่นี่และใหม่สำหรับ Swift


person Alex Cauthen    schedule 18.01.2016    source แหล่งที่มา


คำตอบ (2)


มีข้อมูลมากมายเกี่ยวกับซิงเกิลตันใน Swift คุณเจอบทความนี้ด้วยความสามารถด้าน Google ของคุณหรือไม่? http://krakendev.io/blog/the-right-way-to-write-a-singleton

แต่เพื่อตอบคำถามของคุณ คุณสามารถกำหนดสิ่งที่คุณต้องการใช้ตามปกติได้

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
นั่นคือสิ่งที่ฉันได้รับโค้ดมา แต่บทความนี้เป็นการวิเคราะห์แต่ละวิธีมากกว่าที่จะอธิบายสิ่งที่เกิดขึ้น ขอขอบคุณความช่วยเหลือ - person Alex Cauthen; 19.01.2016
comment
ไม่ใช่ปัญหา! ในกรณีดังกล่าว คุณอาจพบว่าโพสต์นี้มีประโยชน์: github.com/hpique/SwiftSingleton - person Andrew Sowers; 19.01.2016

เห็นด้วยกับ Andrew Sowers เพียงจำไว้ว่าคุณต้องประกาศตัวเริ่มต้นส่วนตัวเช่นนี้:

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

หากไม่มี init() ส่วนตัวนี้ อ็อบเจ็กต์อื่นๆ จะสามารถสร้างอินสแตนซ์ของตนเองได้:

let mySingleton = Singleton()

ขณะนี้มีสองอินสแตนซ์ Singleton.sharedInstance และ mySingleton - ไม่ใช่ซิงเกิลตันอีกต่อไป! ฉันค้นพบสิ่งนี้จากข้อผิดพลาดร้ายแรงที่ "ซิงเกิลตัน" จำนวนมากยิงตัวจับเวลาและสร้างความเสียหายอย่างใหญ่หลวง

person Jeff Sorrentino    schedule 02.03.2019