将变量分配给函数-Swift 3
如何将函数分配给变量,然后根据结果执行操作?我用的是xcode 10将变量分配给函数-Swift 3,swift,xcode,swift3,Swift,Xcode,Swift3,如何将函数分配给变量,然后根据结果执行操作?我用的是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
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
}
我希望结果
等于9
在demo
is时出现错误,无法在属性初始值设定项中使用实例成员foo;属性初始值设定项在self…之前运行。
免责声明:我是swift新手;来自ruby。您的语法有点混乱
- 在func签名中添加下划线以提高可读性
- 要覆盖默认值时,仅传入变量
- 将此示例函数重新编码为而不是始终返回1,但返回传递给它的内容(或默认值)
var _foo:Int = 10
var foo:Int {
get {
return _foo
}
set {
_foo = newValue
}
}
在viewDidLoad()中测试:
请注意:
- 不能对计算属性执行类似“常量默认值”的操作。因为这是一个实例属性,所以只能设置一次
- 不能将函数转换为属性。是的,函数在Swift中是一流的公民,但这只意味着可以通过将它们传递到另一个函数中“将它们当作变量对待”
- 我尝试了一些变体(将“=10”添加到声明中,使Int成为可选的,从东西中删除get,它要么不构建,要么崩溃
如果您确实需要默认值为10,计算传递到事物中的内容,并使其在全球范围内可用,我建议重构您的概念以使用这些解决方案中的一种或另一种。以下是一些语法可能性,具体取决于您需要代码执行的操作:
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
是的,但我收到一个错误,我不明白:
不能在属性初始值设定项中使用实例成员foo;属性初始值设定项在self之前运行…
您需要添加更多的代码。听起来您编写的代码与您发布的代码不同。(1)foo在属性中吗?特定类?枚举?(2)如果在一个类中,什么是初始值设定项?(3)事实上,是什么初始值设定项引起了这个错误?@Sylar请用关于这个错误的附加上下文更新你的问题。我在UIViewController
sorry.Ok.所以如果你不在操场上,我相信如果你(1)把我的foo()作为“原始”函数放在那个视图控制器中,(2)将我的调用放在**viewdiload()-super.viewdiload()-**之后,然后查看结果,事情应该会生成并运行。这就是我要求更多代码的意思。你必须将foo()放在其他地方。1-10是-9,而不是9。@我是正确的,但这不是问题所在。请参阅错误。OP(以及你现在拥有的代码)“demo”声明中有错误。请删除该行中的“Int=”部分。这将始终产生所述错误,这与您在我的回答中评论的错误不同。
print(foo) // prints 10
foo = 1
print(foo) // prints 1
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