我正在开发一款应用程序,以增加我对swift的了解。我的一个问题是,是否可以委托一个结构作为参数的可选函数。
我能做什么:
@objc protocol someProtocol {
optional func optionalFunc(someClass: someClass)
}
class someClass: NSObject {
}
但是,我想做什么(代表objc结构的问题):
@objc protocol someProtocol {
optional func optionalFunc(someStructure: someStructure)
}
struct someStructure {
}
我无法找到解决这个问题的方法。
我想要的另一件事与此类似,但是使用枚举而不是结构:
@objc protocol someProtocol {
optional func optionalFunc(someEnum: someEnum)
}
enum someEnum {
case example
}
如果有人可以帮助我,我将非常感激!
非常感谢!卢西亚诺!
答案 0 :(得分:1)
Swift 2.0允许您执行协议的默认实现。
protocol someProtocol {
func optionalFunc(someStructure: SomeStructure)
}
extension someProtocol {
func optionalFunc(someStructure: SomeStructure){
// optional, leave empty
}
}
struct SomeStructure {
}
通过这种方式,您可以使用可选装饰,并按照自己的意愿行事。
答案 1 :(得分:0)
您无法将参数作为struct
或enum
传递,因为它仅在Swift语言中有效,因此无法在Objective-C中表示。
另一种方法是,您可以将函数声明为变量而不是func
:
protocol someProtocol {
var optionalFunc: (someStructure) -> ()? { get set}
}
实现:
class someClass : someProtocol {
var optionalFunc: (someStructure) -> ()? = { yourStruct in
// Do anything with yourStruct
return
}
}
使用:
var someVar:someClass = someClass()
var result = someVar.optionalFunc(someStructure())
结果是()?
。如果您未实现变量,结果将为nil