. Eğer tamamen static
kullanıyorsan hiç fark yok.
Değerler Değer Türleri ise, static if let someTypeProperty
iyi olacaktır. Referans türleri ise, bazı ekstra dikkat gereklidir. özelliklere sahip
Sadece bazı şeyler: beklendiği gibi
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
özellikleri çalışır. mülkiyet statik özellikler bir örneğine başvurular dönecektir bir reference type
olduğunu
// 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"
.
// 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)
Ben static
işlevlerini kullanmayı biliyorum sadece aptal kanıt yöntemi.subclass
class
ve override
işlevlerini görebilmek için class
işlevlerini kullanabilirsiniz. Bir 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)
}
}
kurtulmak için bir yolu yoktur Bu aynı zamanda bellekte kalan den çok fazla Tip Özellikler 'önler
(static
geçersiz kılma izin ve aslında class final
için bir takma ad değildir)
Daha mantıklı olana karar vermek size kalmış. Kapatma struct
veya class
asla kullanılmadığından, hiçbir fark yaratmaz.Benim için struct
daha mantıklı geliyor çünkü classes
ile çok fazla davranış ilişkilendiriyorum.
Ayrıca kendinize fazla iş verebilir ve bunun yerine özelliklerinin işlevlerini kullanarak kaynaklanan ()
kurtulmak.
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)
Bir sınıf veya yapı yalnızca statik özelliklere/yöntemlere sahip olduğunda ve hiçbir zaman başlatılamayacaksa, türün kendisinin bir Referans veya Değer türü olması önemli değildir. Sadece davranışlarının özelliklerinin davranışlarını nasıl etkilediğini belirtir. –
Peki bu doğru @RMenke. –