如何为变量分配函数然后根据结果执行操作?我正在使用xcode 10。
class ViewController: UIViewController {
func foo(bar: Int = 10) -> Int {
return 1
}
var demo = foo(bar: Int = 1) // cannot assign immutable expression...
var test = 10
let result = demo - test
}
我希望result
等于9
我遇到demo
时遇到错误Cannot use instance member foo within property initializer; property initializers run before self...
免责声明:我是swift的新手;来自红宝石。
答案 0 :(得分:2)
你的语法有点受损。
将此示例func重新编码为不始终返回1,但返回传入的内容(或默认值)。
func foo(_ bar: Int = 10) -> Int {
return bar
}
var demo = foo() // returns the default of 10
var test = foo(1) // returns the parameter passed in, which is 1
let result = demo - test
编辑:实际问题在上面修正的错误中丢失了。 OP是 foo(bar:)是计算属性。所以最终的解决方案是:
var _foo:Int = 10
var foo:Int {
get {
return _foo
}
set {
_foo = newValue
}
}
在viewDidLoad()中测试:
print(foo) // prints 10
foo = 1
print(foo) // prints 1
请注意:
如果您确实需要默认值10,计算传递给事物的内容,和让它在全球范围内可用,我建议您重构您的概念以使用其中一种或另一种解决方案。< / p>
答案 1 :(得分:0)
以下是一些语法可能性,具体取决于您需要执行的代码:
var test = 10
// Simple value
let demo = foo(bar: 1)
let result = demo - test
// Closure calling function
let demo2 = { foo(bar: 1) }
let result2 = demo2() - test
// Pointer to function
let demo3 = foo
let result3 = demo3(1) - test
答案 2 :(得分:-1)
func foo(bar: Int = 10) -> Int {
return bar
}
var demo = foo(bar: 1)
var test = 10
let result = demo - test
print(result)
栏的默认值是10,但你没有做任何事情 你刚回来1
你应该退回吧