首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法继承我的协议(由于信号导致命令失败:分段错误: 11)

无法继承我的协议(由于信号导致命令失败:分段错误: 11)
EN

Stack Overflow用户
提问于 2016-03-16 11:14:22
回答 1查看 113关注 0票数 1

我为绑定块创建了一个小协议(在Swift中是KVO的某个循环),代码如下:

代码语言:javascript
复制
typealias storedClosure = (object: Any) -> Void

protocol BindingProtocol {
    var binders: [String : storedClosure]! { get set }
    func bind(string: String, block: storedClosure)
}

extension BindingProtocol {
    mutating func bind(string: String, block: storedClosure) {
        if binders == nil {
            binders = [String : storedClosure]()
        }
        binders[string] = block
    }
}

尝试继承此协议后,Xcode崩溃或编译错误,如Command failed due to signal: Segmentation fault: 11

代码语言:javascript
复制
class View : UIView, BindingProtocol {
    var binders: [String : (object: Any) -> Void]!
}

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-16 11:32:24

你的财产没有问题,但是你的方法.

代码语言:javascript
复制
protocol BindingProtocol {
    var binders: [String : storedClosure]! { get set }
    func bind(string: String, block: storedClosure) //<--- 1.This
}


extension BindingProtocol {
    mutating func bind(string: String, block: storedClosure) { //<--- 2.This
        if binders == nil {
            binders = [String : storedClosure]()
        }
        binders[string] = block
    }
}

您在第1点将方法定义为普通方法,并在第2点将其实现为变异方法。

它们有相同的签名,但实际上是两种不同的方法。在这种情况下,斯威夫特没有找到合适的电话。当我使用带有默认实现的协议时,这是一个常见的问题。

一个解决办法就是改变..。

代码语言:javascript
复制
protocol BindingProtocol {
    ...
    //From
    //func bind(string: String, block: storedClosure) 

    //To
    mutating func bind(string: String, block: storedClosure) 
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36034055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档