2015-11-24 23 views

Trả lời

5

Với một lớp học mà bạn có thể tạo một lớp con và rõ ràng overrideclass phương pháp. Nếu bạn hoàn toàn sử dụng static thì hoàn toàn không có sự khác biệt.

Nếu thuộc tính là Loại giá trị, static if let someTypeProperty sẽ ổn. Nếu họ là loại tham khảo, cần có thêm một số dịch vụ chăm sóc.


Chỉ cần một số công cụ bằng tài sản:

struct PresetStringsStruct { 

    static let someString : String = "Some Text" // struct 
    static let someView : UIView = UIView(frame: CGRectZero) 

    private init() { 
     print("init") // never happens 
    } 
} 

class PresetStringsClass { 

    static let someString : String = "Some Text" // struct 
    static let someView : UIView = UIView(frame: CGRectZero) 

    private init() { 
     print("init") // never happens 
    } 
} 

struct tính làm việc như mong đợi.

// value properties 
var txtStruct = PresetStringsStruct.someString // "Some Text" 
txtStruct = "SomeOtherText" // "SomeOtherText" 
var txtStruct2 = PresetStringsStruct.someString // "Some Text" 

var txtClass = PresetStringsClass.someString // "Some Text" 
txtClass = "SomeOtherText" // "SomeOtherText" 
var txtClass2 = PresetStringsClass.someString // "Some Text" 

Khi khách sạn sẽ là reference type các thuộc tính tĩnh sẽ trở lại tham chiếu tới một ví dụ.

// reference properties 
var viewStruct = PresetStringsStruct.someView 
viewStruct.frame = CGRect(x: 0, y: 0, width: 50, height: 50) 
var viewStruct2 = PresetStringsStruct.someView // CGRect(x: 0, y: 0, width: 50, height: 50) 

var viewClass = PresetStringsClass.someView 
viewClass.frame = CGRect(x: 0, y: 0, width: 50, height: 50) 
var viewClass2 = PresetStringsClass.someView // CGRect(x: 0, y: 0, width: 50, height: 50) 

Kẻ ngu dại chỉ chứng minh phương pháp mà tôi biết là sử dụng static chức năng. Bạn rõ ràng có thể sử dụng các chức năng class nếu bạn muốn có thể subclass các chức năng classoverride. (static không cho phép ghi đè và thực sự là một bí danh cho class final)

này cũng ngăn cản quá nhiều Loại Properties từ còn lại trong ký ức Không có cách nào để thoát khỏi một static let someProperty : Int = 0

struct PresetStringsStruct { 

    static func someStringFunc() -> String { 
     return "SomeText" 
    } 

    static func someViewFunc() -> UIView { 
     return UIView(frame: CGRectZero) 
    } 
} 

class PresetStringsClass { 

    static func someStringFunc() -> String { 
     return "SomeText" 
    } 

    static func someViewFunc() -> UIView { 
     return UIView(frame: CGRectZero) 
    } 
} 

Sau đó, tùy bạn quyết định điều gì có ý nghĩa hơn. Kể từ khi kèm theo struct hoặc class không bao giờ được sử dụng chính nó, nó làm cho không có sự khác biệt.Đối với tôi, struct có ý nghĩa hơn vì tôi liên kết quá nhiều hành vi với classes.


Bạn cũng có thể tự mình làm việc nhiều hơn và loại bỏ các hàm () do sử dụng hàm thay vì thuộc tính.

struct PresetStringsStruct { 

    static var someString : String { 
     get { 
      return someStringFunc() 
     } 
    } 

    static var someView : UIView { 
     get { 
      return someViewFunc() 
     } 
    } 

    static func someStringFunc() -> String { 
     return "SomeText" 
    } 

    static func someViewFunc() -> UIView { 
     return UIView(frame: CGRectZero) 
    } 
} 

var viewStruct = PresetStringsStruct.someView 
viewStruct.frame = CGRect(x: 0, y: 0, width: 50, height: 50) 
var viewStruct2 = PresetStringsStruct.someView // CGRect(x: 0, y: 0, width: 0, height: 0) 
1

Bạn có thể sử dụng cấu trúc dữ liệu tĩnh là sự lựa chọn tốt nhất:

struct staticStrings { 

    static let name = "String1" 
    static let age = "age1" 

} 

Và để truy cập dữ liệu trên toàn cầu chỉ cần gọi staticStrings.name.

Tại sao chúng ta sử dụng cấu trúc và tốt hơn của nó so với lớp: Struct là thích hợp hơn nếu họ là tương đối nhỏ và copiable vì sao chép là cách an toàn hơn so với việc có nhiều tài liệu tham khảo cho các ví dụ tương tự như xảy ra với các lớp học.

Để biết thêm chi tiết: structs and classes

+0

Khi lớp hoặc cấu trúc chỉ có thuộc tính/phương pháp tĩnh và sẽ không bao giờ được khởi chạy, không quan trọng là loại đó là tham chiếu hoặc loại giá trị. Nó chỉ quan trọng như thế nào hành vi của họ ảnh hưởng đến hành vi của tài sản của họ. –

+0

Vâng thats true @RMenke. –

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