swift - 如何在 Swift 中为协议(protocol)指定一致的类

标签 swift

我想知道是否可以创建一个协议(protocol),其中它的方法引用符合类的类型

UHSyncObjectProtocol 协议(protocol)

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

关于swift - 如何在 Swift 中为协议(protocol)指定一致的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46211019/

相关文章:

ios - 为什么我不能在扩展中使用round?

ios - 在 UITextField 中插入文本后不需要的 UIView 框架重置

swift - 如果 .type() 方法不起作用,如何更好地处理 XCUIApplication.keyboards.keys[String].tap() ?

swift - 如何使用 Quick 使用 XIB 文件测试 View Controller ?

swift - 表达式类型 '[Card]' 不明确,没有更多上下文将数组传递给函数

ios - 根据键盘高度更新文本字段的约束

ios - 如果无法打开 URL,则显示警报

swift - 哪些版本的 Xcode 支持哪些版本的 Swift?

swift - 为什么单击取消按钮后 TableView 不重置结果?

swift - SKLabelNode 边界和边界问题