是否可以擴展所有現有的Swift
對象,如同在ObjectiveC中將NSObject
添加到category
之上一樣?擴展所有Swift對象
根據此article,所有Swift
對象都繼承自SwiftObject
類,但我無法向其添加擴展名。
有沒有解決這個問題的方法?
是否可以擴展所有現有的Swift
對象,如同在ObjectiveC中將NSObject
添加到category
之上一樣?擴展所有Swift對象
根據此article,所有Swift
對象都繼承自SwiftObject
類,但我無法向其添加擴展名。
有沒有解決這個問題的方法?
不是。Swift對象實際上並沒有從任何根基類繼承。編譯器可以插入一個作爲實現細節,但語言沒有這個。
該解決方案是一個函數,通常是泛型函數,而不是方法。適用於「各種對象」的東西並不是真正的封裝。有很少的行爲適用於宇宙中的每一個可以想象的事物。但是函數絕對可以映射任何東西,所以這裏是一個更好的工具。
正如注意,不是所有對象從NSObject
繼承或者,這是不是一種語言的要求。但你絕對是絕大多數人所做的。看一下NSProxy
樹頂部的非NSObject
樹(它實現NSObject
協議,但不從NSObject
類繼承)。這就是爲什麼id
與NSObject*
不一樣的原因。
您關於相關對象的問題,這是內置:
import Foundation
class Thing { }
let thing = Thing()
var MyKey: Character = "0"
objc_setAssociatedObject(thing, &MyKey, "I'm a value!", objc_AssociationPolicy(OBJC_ASSOCIATION_COPY))
println(objc_getAssociatedObject(thing, &MyKey))
這就是你設法創造?請注意,objc_setAssociatedObject
也是一個函數,而不是ObjC中的一個方法。
SwiftObject業務可能是一個實現細節,但不從另一個類繼承的Swift類是默認的根類。 – Atomix 2014-09-04 11:23:16