2017-09-14 52 views
1

不知是可能创造一个协议,其中,其方法是指一种类型的贴合类如何指定一个符合类的协议在夫特

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) 
    } 
} 

我不知道它是否可能。

+1

你可以使用泛型,但你的代码的第一个块可能是最好的;在完成处理程序中,您可以轻松地从'UHSyncObjectProtocol'向下转换为特定的对象类型。 – Paulw11

+0

是的,对我而言,仿制药可能会更好,所以我不必沮丧。 –

回答

3

可以使用泛型来实现这一

这里是例子

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中的协议允许泛型,谢谢。这是我正在寻找的。 –

相关问题