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

7

我尝试声明一个符合以下Objective-C块的闭包:

typedef void(^TyphoonDefinitionBlock)(TyphoonDefinition *definition);

像这样:

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

当我尝试这样做时(见图片),我遇到了以下错误:

enter image description here

正确的方法是什么?


除了苹果员工,我们都是全新的 Swift 开发者。 :-) - Steve Waddicor
3个回答

5
你需要将definition声明为ImplicitlyUnwrappedOptional (TyphoonDefinition!),因为在Objective-C中它是可以为空的指针。

在Swift中,普通变量(和常量)不能为nil。它们必须包含一个值。


1
@JasperBlues 哈哈,别担心。我只想说我们都对 Swift 还比较陌生,因为它发布还不到一周的时间 ;) 现在我们才开始深入了解这门语言的细节,并且发现有些事情回过头来看就很显然了。 - drewag

1

想要详细解释,从你的代码开始

Objective C typedef void(^TyphoonDefinitionBlock)(TyphoonDefinition *definition);

在Swift中,您可以这样做 typealias TyphoonDefinitionBlock = (definition:TyphoonDefinition?)->Void

如果您想在特定时刻向调用方对象发出提示,则需要创建一个属性。 var typhoonDefinitionCompletion:BlockTyphoonDefinitionBlock?

您可以使用typhoonDefinitionCompletion,并可以像这样触发回调消息。 self.typhoonDefinitionCompletion!(definition:passyourtyphoneDefinition)


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接