Swift:定义一个与Objective-C块兼容的闭包

时间:2014-06-07 03:29:08

标签: objective-c swift

我试图声明一个与以下Objective-C块匹配的闭包:

typedef void(^TyphoonDefinitionBlock)(TyphoonDefinition *definition);
像这样:

var config: TyphoonDefinitionBlock = { (definition: TyphoonDefinition) in
    definition.injectProperty("quest", with: nil)
}

。 。 。并得到以下错误。 (见图)。

enter image description here

这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:5)

您需要将definition声明为ImplicitlyUnwrappedOptionalTyphoonDefinition!),因为在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)