将变量赋值给函数 - Swift 3

时间:2016-12-13 20:13:48

标签: 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
}

我希望result等于9

我遇到demo时遇到错误Cannot use instance member foo within property initializer; property initializers run before self...

免责声明:我是swift的新手;来自红宝石。

3 个答案:

答案 0 :(得分:2)

你的语法有点受损。

  • 将下划线添加到func签名以提高可读性。
  • 如果要覆盖默认值,请传入 变量。
  • 将此示例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

请注意:

  • 无法执行任何类似于计算属性的“常量默认值”的操作。由于这是一个实例属性,因此只需将其设置一次。
  • 您无法将某个功能转换为属性。是的,函数是Swift中的一等公民,但这只意味着你可以通过将它们传递给另一个函数来“将它们视为一个变量”。
  • 我尝试了一些变体(在声明中添加“= 10”,使Int成为可选,从事物中移除get,并且它不会构建或崩溃。

如果您确实需要默认值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

你应该退回吧