如何将 属性 声明为 Swift 中的函数?
How to declare a property as a function in Swift?
这是我的代码:
import Cocoa
class VC1: NSViewController {
let aFunctionVar ()->Void
}
但是编译器告诉我:"Class VC1 has no initializers"
根据 Apple Swift iBook 中的 swift 示例,他们的示例是这样的:
var mathFunction: (Int, Int) -> Int = addTwoInts
但就我而言,我正在尝试创建一个 属性 变量。目前还不知道变量是什么,所以我不能在那里设置它。有帮助吗?
Edit - 我已经知道如何在简单 String/Array/Dictionary 类型等方面使变量成为可选的和惰性的。但这是一个函数类型 属性 多变的。它旨在保存类型 ()->Void
的函数。关于如何做到这一点的任何帮助?
在 objectiveC 中,这可以通过像这样制作一个块 属性 来完成:
@property (nonatomic, copy) void (^aFunctionVar)();
如果设置对象后才知道值,可以使用惰性变量:
class LazyTester {
lazy var someLazyString: String = {
return "So sleepy"
}()
}
var myLazyTester = LazyTester()
myLazyTester.someLazyString
编译器给你这个错误是因为你定义了一个强制存储变量,projectLaunchData
,但没有给它一个值。如果你知道初始化时的变量值,你可以在初始化时设置它。
将 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?()
这是我的代码:
import Cocoa
class VC1: NSViewController {
let aFunctionVar ()->Void
}
但是编译器告诉我:"Class VC1 has no initializers"
根据 Apple Swift iBook 中的 swift 示例,他们的示例是这样的:
var mathFunction: (Int, Int) -> Int = addTwoInts
但就我而言,我正在尝试创建一个 属性 变量。目前还不知道变量是什么,所以我不能在那里设置它。有帮助吗?
Edit - 我已经知道如何在简单 String/Array/Dictionary 类型等方面使变量成为可选的和惰性的。但这是一个函数类型 属性 多变的。它旨在保存类型 ()->Void
的函数。关于如何做到这一点的任何帮助?
在 objectiveC 中,这可以通过像这样制作一个块 属性 来完成:
@property (nonatomic, copy) void (^aFunctionVar)();
如果设置对象后才知道值,可以使用惰性变量:
class LazyTester {
lazy var someLazyString: String = {
return "So sleepy"
}()
}
var myLazyTester = LazyTester()
myLazyTester.someLazyString
编译器给你这个错误是因为你定义了一个强制存储变量,projectLaunchData
,但没有给它一个值。如果你知道初始化时的变量值,你可以在初始化时设置它。
将 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?()