如何将Swift协议中的方法设为可选? 现在似乎所有协议中的方法都是必需的。是否有其他解决方法?
虽然在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()
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?()