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
通过
关联类型定义协议