Extension 增加存储属性

Swift 如何给 extension 增加存储属性? 这是个老大难的问题。

王巍在这篇文章给了办法:点击链接前往

重点如下

定义一个协议

public protocol TrafficLightOption {
    associatedtype Value

    /// 默认的选项值
    static var defaultValue: Value { get }
}

增加 options

public class TrafficLight {

    // ...

    // 1
    private var options = [ObjectIdentifier: Any]()

    public subscript<T: TrafficLightOption>(option type: T.Type) -> T.Value {
        get {
            // 2
            options[ObjectIdentifier(type)] as? T.Value
                ?? type.defaultValue
        }
        set {
            options[ObjectIdentifier(type)] = newValue
        }
    }

    // ...    
}

增加存储属性

extension TrafficLight {
    public enum GreenLightColor: TrafficLightOption {
        case green
        case turquoise

        public static let defaultValue: GreenLightColor = .green
    }
}
上一篇: 谈一谈App的架构设计
下一篇: SpeedySwift
目录