Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:定义与Objective-C block兼容的闭包_Objective C_Swift - Fatal编程技术网

Swift:定义与Objective-C block兼容的闭包

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) } 。并得到以下错误。(见图) 正确的

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

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在不到一周前发布以来,我们都对它相当陌生;)我们现在都在深入研究语言的细节,并找出一些在回顾中似乎显而易见的东西。除了苹果员工,我们都是快速发展的新手。:-)