这是一个从jckarter的答案衍生而来的简单但完整的示例。
它显示了如何向现有类添加新属性。它通过在扩展块中定义计算属性来实现。计算的属性存储为关联的对象:
import ObjectiveC// Declare a global var to produce a unique address as the assoc object handleprivate var AssociatedObjectHandle: UInt8 = 0extension MyClass { var stringProperty:String { get { return objc_getAssociatedObject(self, &AssociatedObjectHandle) as! String } set { objc_setAssociatedObject(self, &AssociatedObjectHandle, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) } }}编辑:
如果需要支持获取未初始化属性的值并避免发生错误
unexpectedly found nil while unwrapping an Optionalvalue,则可以按以下方式修改getter:
get { return objc_getAssociatedObject(self, &AssociatedObjectHandle) as? String ?? "" }


