2016-03-15 23 views
5

Tôi đã tạo một tệp mới ->swift file. gọi Globals.Swift Sau đó, trong đó tôi đã thực hiện:Gặp khó khăn khi triển khai một singleton đơn giản trong swift

class Globals { 

    static let sharedInstance = Globals() 

    init() { 
     var max=100 
    } 

} 

Trong một lớp học (UIViewcontroller) Tôi muốn sử dụng nó,

Globals.sharedInstance //is going ok 

là tốt, nhưng khi tôi đi sâu vào .max tôi nhận được lỗi.

+2

Bản sao có thể có của [Sử dụng mô hình gửi đi \ _once singleton trong Swift] (http://stackoverflow.com/questions/24024549/using-a-dispatch-once-singleton-model-in-swift) –

+0

câu hỏi là đơn giản, không cần phải đi xa, và không phải là một bản sao. Tôi chỉ cần làm cho nó ok cho đến khi tôi cố gắng đi sâu hơn với .max – Curnelious

+2

Bạn cần khai báo 'max' như một biến cá thể của lớp ... – kennytm

Trả lời

9

Bạn không thể chỉ có var = xxx trong init. Biến phải được khai báo ở cấp cao nhất.

Ví dụ về sử dụng singleton của bạn:

class Globals { 

    static let sharedInstance = Globals() 

    var max: Int 

    private init() { 
     self.max = 100 
    } 

} 

let singleton = Globals.sharedInstance 

print(singleton.max) // 100 

singleton.max = 42 

print(singleton.max) // 42 

Khi bạn cần phải sử dụng singleton trong lớp khác, bạn chỉ cần làm điều này trong các lớp khác:

let otherReferenceToTheSameSingleton = Globals.sharedInstance 

Cập nhật sau Martin R và Bình luận của Caleb: Tôi đã tạo bộ khởi tạo riêng tư. Nó ngăn chặn, trong các tệp Swift khác, khởi tạo Globals(), thực thi lớp này hoạt động như một singleton bằng cách chỉ có thể sử dụng Globals.sharedInstance.

+0

nhận được nó! cảm ơn, sẽ chấp nhận trong một phút. – Curnelious

+0

có sự khác biệt giữa self.max = 100 hoặc max = 100 trong init() không? – Curnelious

+1

Đây là một đối tượng được chia sẻ, không phải là một singleton. – Caleb

Các vấn đề liên quan