如何使 swift 中的协议方法可选?
How can I make a protocol method in swift optional?
如何使 swift 中的协议方法可选?现在似乎需要协议中的所有方法。还有其他解决方法吗?
要使用可选方法,请用 @objc
标记您的协议
@objc protocol MyProtocol {
optional func someMethod();
}
虽然您可以在 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?()
如何使 swift 中的协议方法可选?现在似乎需要协议中的所有方法。还有其他解决方法吗?
要使用可选方法,请用 @objc
@objc protocol MyProtocol {
optional func someMethod();
}
虽然您可以在 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?()