如何使Swift中的协议方法变为可选的?

3

如何将Swift协议中的方法设为可选? 现在似乎所有协议中的方法都是必需的。是否有其他解决方法?


如果我的回答对您有帮助,请点赞并接受它。谢谢! - Roland Keesom
2个回答

6

虽然在Swift 2中你可以使用@objc,但你可以添加一个默认实现,而不必自己提供方法:

protocol Creatable {
    func create()
}

extension Creatable {
    // by default a method that does nothing
    func create() {}
}

struct Creator: Creatable {}

// you get the method by default
Creator().create()

然而,在Swift 1.x中,您可以添加一个保存可选闭包的变量。
protocol Creatable {
    var create: (()->())? { get }
}

struct Creator: Creatable {
    // no implementation
    var create: (()->())? = nil

    var create: (()->())? = { ... }

    // "let" behavior like normal functions with a computed property
    var create: (()->())? {
        return { ... }
    } 
}

// you have to use optional chaining now
Creator().create?()

5

要使用可选方法,请在您的协议上标注 @objc

@objc protocol MyProtocol {

    optional func someMethod();

}

正如文档中所述。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接