【问题标题】:Swift Protocol ConformanceSwift 协议一致性
【发布时间】:2015-08-26 21:45:20
【问题描述】:

这是我正在玩弄的一组价值关系的示例。

protocol Configurable {
    func configure(data: Any?) -> Void
}

class RelatedObject {
    var x: String = ""
    var y: String = ""
}

class Example {
    var a: String = ""
    var b: String = ""
    var c: String = ""
}

extension Example: Configurable {
    func configure(data: Any?) //I want the parameter to be of type RelatedObject?, not Any?
    {
        if let d = data as? RelatedObject { //I don't want to have to do this every time i implement Configurable on an object.
            //do stuff
            a = d.x
            b = d.y
            c = d.x + d.y
        }
    }
}

有没有办法让我的实现 Configurable 协议的类能够限制它们在函数签名中接受的特定类型的对象?

我觉得 Swift 会/可以/应该有办法避免我必须检查类类型以了解传递给我想要配置的对象的内容。

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    您正在协议定义中寻找类型别名。

    protocol Configurable {
        typealias InputData
        func configure(data: InputData) -> Void
    }
    

    在任何实现您的协议的东西中,您都可以将 typealias 设置为您想要的类型。

    class RelatedObject {
        var x: String = ""
        var y: String = ""
    }
    
    class Example {
        var a: String = ""
        var b: String = ""
        var c: String = ""
    }
    
    extension Example: Configurable {
        typealias InputData = RelatedObject 
    
        func configure(data: InputData)  {
            a = data.x
            b = data.y
            c = data.x + data.y
        }
    }
    

    【讨论】:

    • 非常感谢!我和我的同事整天都在为此绞尽脑汁:)
    • 很高兴它对您有所帮助。好好休息一周。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    相关资源
    最近更新 更多