Swift协议中的静态类型属性
我试图在我的应用程序中为模型层使用面向协议的编程 我从定义两个Swift协议中的静态类型属性,swift,oop,model,protocols,Swift,Oop,Model,Protocols,我试图在我的应用程序中为模型层使用面向协议的编程 我从定义两个协议开始: protocol ParseConvertible { func toParseObject() -> PFObject? } protocol HealthKitInitializable { init?(sample: HKSample) } 在实现了符合这两个模型的第一个模型之后,我注意到另一个模型基本上是相似的,所以我想用新模型创建协议继承: protocol BasicModel: He
协议开始:
protocol ParseConvertible {
func toParseObject() -> PFObject?
}
protocol HealthKitInitializable {
init?(sample: HKSample)
}
在实现了符合这两个模型的第一个模型之后,我注意到另一个模型基本上是相似的,所以我想用新模型创建协议继承:
protocol BasicModel: HealthKitInitializable, ParseConvertible {
var value: AnyObject { get set }
}
A您可以看到这个协议
还有一个额外的东西,那就是值
,但是我希望这个值与类型无关。。。现在我有一些模型使用了双倍的
,但谁知道将来会出现什么呢。如果我把它留给AnyObject
我会被判使用所有我想使用的东西,如果我声明它是Double
那么称它为BasicModel
是没有意义的,而是BasicDoubleModel
或类似的东西
你有一些如何实现这一点的提示吗?或者我试图用错误的方法解决这个问题?您可能想要定义一个带有“关联类型”的协议, 这大致类似于泛型类型。 在Swift手册中: 定义协议时,有时声明一个或多个协议是有用的 更多关联类型作为协议定义的一部分。一 associated type为指定的类型提供占位符名称(或别名) 作为协议的一部分使用。要使用的实际类型 在采用协议之前,不会指定关联的类型。 关联的类型由
typealias
关键字指定
就你而言:
protocol BasicModel: HealthKitInitializable, ParseConvertible {
typealias ValueType
var value: ValueType { get set }
}
然后可以为值
属性创建不同类型的类
遵守协议:
class A : BasicModel {
var value : Int
func toParseObject() -> PFObject? { ... }
required init?(sample: HKSample) { ... }
}
class B : BasicModel {
var value : Double
func toParseObject() -> PFObject? { ... }
required init?(sample: HKSample) { ... }
}
对于Swift 2.2/Xcode 7.3及更高版本,请替换中的typealias
通过关联类型定义协议