Closure默认初始化程序缺失 - swift闭包变量声明?

时间:2016-01-22 10:27:13

标签: ios iphone swift closures

我在viewController类之外声明了闭包,我在viewController类中创建了该闭包的一个变量,但它显示了此闭包缺少的默认初始值设定项的错误。

我理解变量和常量声明以及默认初始化的后果必须在声明时分配。但我无法理解我的闭包的默认初始化是什么,我尝试了一些技巧来解决它,但没有解决。

这是我的封闭声明

typealias completionBlock = (String) -> ()  

这是我关闭的变量声明,它提示初始化它。

class ViewController: UIViewController {

     var completionHandler: completionBlock = // What could be the default initializer to this closure

     override func viewDidLoad() {
         super.viewDidLoad()
     }
}

每当我获得传递所需的值时,我想实现调用此块,与objective-c external completionBlock声明相同。

2 个答案:

答案 0 :(得分:5)

您有3个选项

  • 默认属性:

    completionHandler
  • 隐式解包可选 - 只有在您100%确定在调用var completionHandler: completionBlock! 之前设置了值时才执行此操作:

    var completionHandler: completionBlock?
    
    // later callable via
    completionHandler?("hi")
    
  • “常规”可选

    var files =  DirInfo.GetFiles()
                        .Where(file => (file.CreationTime >= startDate && file.CreationTime <= endDate)); 
    

答案 1 :(得分:1)

我认为它应该是这样的?

var completionHandler: completionBlock = { stringValue  in 
        // but your code here
    }