Swift:定义与Objective-C block兼容的闭包
我试图声明一个与以下Objective-C块匹配的闭包:Swift:定义与Objective-C block兼容的闭包,objective-c,swift,Objective C,Swift,我试图声明一个与以下Objective-C块匹配的闭包: typedef void(^TyphoonDefinitionBlock)(TyphoonDefinition *definition); 像这样: var config: TyphoonDefinitionBlock = { (definition: TyphoonDefinition) in definition.injectProperty("quest", with: nil) } 。并得到以下错误。(见图) 正确的
typedef void(^TyphoonDefinitionBlock)(TyphoonDefinition *definition);
像这样:
var config: TyphoonDefinitionBlock = { (definition: TyphoonDefinition) in
definition.injectProperty("quest", with: nil)
}
。并得到以下错误。(见图)
正确的方法是什么 您需要将
定义
声明为(台风定义!
),因为在objective-C中,它是一个可以为零的指针
swift中的正常变量(和常量)不能为零。它们必须包含一个值。我使用的是typealias,取自
typealias resultBlock=(成功:Bool,结果:AnyObject!)->Void要详细解释它,请从您的代码开始 目标C
typedef void(^typhondefinitionblock)(typhondefinition*定义)代码>
在斯威夫特,你是这样做的
typealias typhondeFinitionBlock=(定义:typhondeFinition?)->Void
如果您想在特定时刻之后接近调用方对象,则需要创建一个属性。
var typhondefinitioncompletion:blocktyphondefinitionblock?
您可以使用typhondefinitioncompletion
,并且可以像这样发出回调消息。
self.typhondfinitioncompletion!(定义:passyourtyponedefinition)
@jasperbluse哈哈,不用担心。我还想说的是,自从Swift在不到一周前发布以来,我们都对它相当陌生;)我们现在都在深入研究语言的细节,并找出一些在回顾中似乎显而易见的东西。除了苹果员工,我们都是快速发展的新手。:-)