繁体   English   中英

Objective-C的可选协议是不是应该在Swift中完成的?

[英]Are optional protocols from Objective-C not something that should be done in Swift?

在Objective-C中,使用符合协议并设置委托以允许两个对象相互通信是一种非常常见的范例。 这部分是,他们没有实现可选协议。

似乎Swift并不认为这是它的语言的一部分。 它有协议,但为了将协议中的方法标记为可选,协议需要一个objc前缀,告诉我它也是一个Objective-C遗物?

我们应该做些什么而不是Swift-esque? 通过花哨的关闭或什么?

此开发人员论坛主题中

协议中的可选方法仅限于@objc协议,因为我们尚未在本机协议中实现它们。 这是我们计划支持的


虽然您可以在纯Swift中使用可选方法实现委托模式,但它非常难看......

protocol MyOperationDelegate:class {
    var operation:Optional<(MyOperation, didComplete:Bool) -> Void> { get }
}

class MyOperation {
    weak var delegate:MyOperationDelegate?

    func start() {
        println("started")
        self.delegate?.operation?(self, didComplete:true)
    }
}

class Operator:MyOperationDelegate {

    func doOperate() {
        let operation = MyOperation()
        operation.delegate = self
        operation.start()
    }

    var operation:((MyOperation, didComplete:Bool) -> Void)? { return self._operation }
    func _operation(operation:MyOperation, didComplete:Bool) {
        println("operation: \(operation) didComplete:\(didComplete)")
    }
}

let op = Operator()
op.doOperate()

并且您不能声明多个类似的委托方法名称:

protocol MyOperationDelegate {
    var operation:Optional<(MyOperation, didComplete:Bool) -> Void> { get }
    var operation:Optional<(MyOperation, inProgress:) -> Void> { get }
//      ^ [!] Invalid redeclaration of 'operation'
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM