SWIFT:封闭声明像块声明

问题描述 投票:84回答:2

我们可以在Objective-C如下声明块。

typedef void (^CompletionBlock) (NSString* completionReason);

我想这样做是迅速,它给错误。

func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction

错误:未申报“completionFunction”的使用

定义:

var completion: CompletionBlock = { }

这个怎么做?

更新:

据@ jtbandes的回答,我可以创建多个参数作为封样

typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
ios swift
2个回答
138
投票

syntax for function types(in) -> out

typealias CompletionBlock = (NSString?) -> Void
// or
typealias CompletionBlock = (result: NSData?, error: NSError?) -> Void
var completion: CompletionBlock = { reason in print(reason) }
var completion: CompletionBlock = { result, error in print(error) }

需要注意的是围绕着输入型括号只需要为雨燕3+。


13
投票

Here约为迅速闭合真棒博客。

这里有些例子:

作为一个变量:

var closureName: (inputTypes) -> (outputType)

作为一个可选变量:

var closureName: ((inputTypes) -> (outputType))?

作为一个类型别名:

typealias closureType = (inputTypes) -> (outputType)
© www.soinside.com 2019 - 2024. All rights reserved.