使用类,您可以创建子类,显然是override class方法.如果您纯粹使用static,则没有任何区别.
如果属性是值类型,那static if let someTypeProperty就没问题了.如果它们是参考类型,则需要额外注意.
只是一些属性的东西:
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
}
}
Run Code Online (Sandbox Code Playgroud)
struct 属性按预期工作.
// 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"
Run Code Online (Sandbox Code Playgroud)
当属性是reference type静态属性时,将返回对一个实例的引用.
// 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)
Run Code Online (Sandbox Code Playgroud)
我所知道的唯一傻瓜式方法是使用static函数.可以很明显的使用class,如果你希望能够给函数subclass的class和override函数.(static不允许覆盖,实际上是别名class final)
这也可以防止太多的类型属性留在内存中无法摆脱astatic 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)
}
}
Run Code Online (Sandbox Code Playgroud)
然后由你决定什么更有意义.由于封闭struct或class从不使用本身,它没有任何区别.对我来说struct更有意义,因为我将太多的行为与之相关联classes.
你也可以给自己更多的工作,并摆脱()使用函数而不是属性的结果.
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
969 次 |
| 最近记录: |