Swift 协议一致性
Posted
技术标签:
【中文标题】Swift 协议一致性【英文标题】:Swift Protocol Conformance 【发布时间】: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 会/可以/应该有办法避免我必须检查类类型以了解传递给我想要配置的对象的内容。
【问题讨论】:
【参考方案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
【讨论】:
非常感谢!我和我的同事整天都在为此绞尽脑汁:) 很高兴它对您有所帮助。好好休息一周。以上是关于Swift 协议一致性的主要内容,如果未能解决你的问题,请参考以下文章