我试图声明一个与以下Objective-C块匹配的闭包:
typedef void(^TyphoonDefinitionBlock)(TyphoonDefinition *definition);
像这样:
var config: TyphoonDefinitionBlock = { (definition: TyphoonDefinition) in
definition.injectProperty("quest", with: nil)
}
。 。 。并得到以下错误。 (见图)。
这样做的正确方法是什么?
答案 0 :(得分:5)
您需要将definition
声明为ImplicitlyUnwrappedOptional(TyphoonDefinition!
),因为在Objective-C中它是一个可以为nil的指针。
swift中的正常变量(和常量)不能为零。它们必须包含值。
答案 1 :(得分:1)
我正在使用来自http://berzniz.com/post/87924122326/notes-from-coding-in-swift的类型 typealias resultBlock =(成功:Bool,结果:AnyObject!) - >空隙
答案 2 :(得分:1)
喜欢详细解释,从你的代码开始
目标C.
typedef void(^TyphoonDefinitionBlock)(TyphoonDefinition *definition);
在Swift中你就是这样做的
typealias TyphoonDefinitionBlock = (definition:TyphoonDefinition?)->Void
如果您想在特定时刻之后与调用者对象建立亲密关系,则需要创建一个属性。
var typhoonDefinitionCompletion:BlockTyphoonDefinitionBlock?
你可以使用typhoonDefinitionCompletion
,你可以像这样提出回调消息。
self.typhoonDefinitionCompletion!(definition:passyourtyphoneDefinition)