如何在Swift中将属性声明为函数?

时间:2015-09-24 23:19:31

标签: objective-c swift closures objective-c-blocks

这是我的代码:

page.select("Patient ##{@patient.id}", from: 'clinical_event_patient_id')
然而,编译器告诉我:“类VC1没有初始化器”

根据Apple Swift iBook中的快速示例,他们就是这样做的例子:

import Cocoa

class VC1: NSViewController {
    let aFunctionVar ()->Void
}

但在我的情况下,我正在尝试创建一个属性变量。目前还不知道变量是什么,所以我无法在那里设置它。有什么帮助吗?

编辑 - 我已经知道如何使变量成为可选和懒惰的简单字符串/数组/字典类型等。但这是一个函数类型的属性变量。它意味着保存var mathFunction: (Int, Int) -> Int = addTwoInts 类型的函数。有关如何做到这一点的任何帮助?

在objectiveC中,可以通过创建这样的块属性来完成:

()->Void

2 个答案:

答案 0 :(得分:0)

如果在设置对象后知道该值,则可以使用惰性变量:

class LazyTester {
    lazy var someLazyString: String = {
       return "So sleepy"
    }()
}
var myLazyTester = LazyTester()
myLazyTester.someLazyString

编译器正在为您提供该错误,因为您正在定义一个强制存储变量projectLaunchData,但没有给它一个值。如果您在初始化时知道​​变量值,则可以在初始化时设置它。

答案 1 :(得分:0)

projectLaunchData声明为可选var

import Cocoa

class VC1: NSViewController {
    var projectLaunchData: (()->Void)?
}

然后您可以稍后指定一个值:

func test() {
    print("this works")
}

let myVC = VC1()

// assign the function
myVC.projectLaunchData = test

// Call the function using optional chaining.  This will safely do nothing
// if projectLaunchData is nil, and call the function if it has been assigned.
// If the function returns a value, it will then be optional because it was
// called with the optional chaining syntax.
myVC.projectLaunchData?()