2015-06-18 12 views
6

Điều tôi tìm thấy cho đến bây giờ là kịch bản của một bộ công khai và riêng tư như hiển thị bên dưới.Swift: bộ nhận riêng và công khai

private(set) var distanceTravelled: Double 

Tôi muốn nó theo cách khác. Tất nhiên những điều sau đây không hoạt động.

private(get) public var distanceTravelled: Double 
+0

bạn muốn có một setter công cộng và một getter tin cho biến này? – giorashc

+0

Tôi không nghĩ bạn có thể. Trường hợp sử dụng cho việc này là gì? –

+0

Biến chỉ là một ví dụ nhưng những gì tôi muốn làm là lấy dữ liệu từ một dịch vụ web, được thực hiện trong một lớp khác và chuyển nó đến biến này. Nhưng không có lớp nào khác so với cái giữ biến nên truy cập nó. –

Trả lời

6

Nếu bạn muốn có một setter công cộng nhưng một getter tin cho var này bạn có thể khai báo nó như tin:

private var distanceTravelled: Double 

và tạo ra một phương pháp nào để thiết lập biến này:

public func setDistanceTravelled(distanceTravelled: Double) { 
     self.distanceTravelled = distanceTravelled 
} 
+1

Được rồi, điều này là rõ ràng. Nhưng một hy vọng có thể có một hình thức ngắn. –

+0

oh, vì vậy bạn đang tìm kiếm tuyên bố viết tắt của điều này ... cũng như được đề cập bởi những người khác tôi không tin rằng nó được hỗ trợ ngay từ hộp ... – giorashc

6

Tôi không tin điều này là có thể. Trích dẫn từ documentation:

Bạn có thể cung cấp cho một setter mức thấp truy cập hơn getter tương ứng của nó

Đó là, bạn chỉ có thể làm thay đổi quyền truy cập theo một hướng, và đó là để làm cho setter hạn chế hơn so với getter.

4

Bạn cần tuyên bố nó như thế này;

internal private(set) var distanceTravelled: Double 
+4

Ông muốn nó theo cách khác vòng – ph1lb4

0

Bạn có thể làm một cái gì đó như thế này:

private var _distanceTravelled: Double 
var distanceTravelled: Double { 
    get { 
    fatalError("Access denied.") 
    } 
    set { 
    _distanceTravelled = newValue 
    } 
} 
Các vấn đề liên quan