在swift中委派一个结构?

时间:2015-10-24 15:25:22

标签: ios swift

我正在开发一款应用程序,以增加我对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    
}

如果有人可以帮助我,我将非常感激!

非常感谢!卢西亚诺!

2 个答案:

答案 0 :(得分:1)

Swift 2.0允许您执行协议的默认实现。

protocol someProtocol {
    func optionalFunc(someStructure: SomeStructure)
}

extension someProtocol {
    func optionalFunc(someStructure: SomeStructure){
        // optional, leave empty
    }
}

struct SomeStructure {

}

通过这种方式,您可以使用可选装饰,并按照自己的意愿行事。

答案 1 :(得分:0)

您无法将参数作为structenum传递,因为它仅在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