如何指定一个符合类的协议在夫特
问题描述:
不知是可能创造一个协议,其中,其方法是指一种类型的贴合类如何指定一个符合类的协议在夫特
UHSyncObjectProtocol协议
protocol UHSyncObjectProtocol: class {
func sync(completionBlock: ((UHSyncObjectProtocol) -> Void)?)
// ideally, I want to refer to the conforming class instead of UHSyncObjectProtocol
}
用户配置文件类
class UHUserProfile: UHSyncObjectProtocol {
func sync(completionBlock: ((UHUserProfile) -> Void)?) {
// do something
completionBlock?(self)
}
}
我们呃账户类别
class UHUserAccount: UHSyncObjectProtocol {
func sync(completionBlock: ((UHUserAccount) -> Void)?) {
// do something
completionBlock?(self)
}
}
我不知道它是否可能。
答
可以使用泛型来实现这一
这里是例子
protocol UHSyncObjectProtocol: class {
associatedtype T
func sync(completionBlock: ((T) -> Void)?)
// ideally, I want to refer to the conforming class instead of UHSyncObjectProtocol
}
class UHUserProfile: UHSyncObjectProtocol {
func sync(completionBlock: ((UHUserProfile) -> Void)?) {
// do something
completionBlock?(self)
}
}
class UHUserAccount: UHSyncObjectProtocol {
func sync(completionBlock: ((UHUserAccount) -> Void)?) {
// do something
completionBlock?(self)
}
}
+0
我忘了Swift中的协议允许泛型,谢谢。这是我正在寻找的。 –
你可以使用泛型,但你的代码的第一个块可能是最好的;在完成处理程序中,您可以轻松地从'UHSyncObjectProtocol'向下转换为特定的对象类型。 – Paulw11
是的,对我而言,仿制药可能会更好,所以我不必沮丧。 –