繁体   English   中英

无法将 Int 类型的值转换为预期的参数类型“...”

[英]Cannot convert value of type Int to expected Argument type '...'

我试图了解参数在 Swift 中的工作原理,因此编写了一个简单的类,如下所示

class NumberIncreaser {


func numberIncrementor(var number:Int)->Int{
    number += 1
    return number
}


var anotherNumber = numberIncrementor(3)



}

然而,即使在明确提到方法 'numberIncrementor' 采用 Int 之后,Xcode 也会要求一个 numberIncreaser 对象(希望我使用的是正确的术语,编程新手)。 我注意到当我删除该类时,该方法运行良好。 我想知道为什么会这样,我该如何解决。

谢谢!

你的代码不会编译。 考虑一下:

class NumberIncreaser {

    static func numberIncrementor(var number:Int)->Int{
        number += 1
        return number
    }

}

var anotherNumber = NumberIncreaser.numberIncrementor(3)

或者另一种变体:

class Number {

    var number: Int

    init(number: Int) {
        self.number = number
    }

    func increasedNumber() -> Int {
        return number + 1
    }
}

var anotherNumber = Number(number: 3).increasedNumber()

另外,不要在 func 参数声明中使用 var:

class NumberIncreaser {
    static func numberIncrementor(number: Int) -> Int {
        let answer = number + 1
        return answer
    }
}

var anotherNumber = NumberIncreaser.numberIncrementor(3)

var参数已被弃用,因此 number 是一个常量,使其不可变。 您也不能调用numberIncrementor因为它是一个实例方法。

一个出路是通过在声明前加上classstatic关键字来使numberIncrementor成为一个类或静态方法: class func numberIncrementor ,你可以这样称呼它: NumberIncreaser.numberIncrementor(3)

class NumberIncreaser {

  class func numberIncrementor(number: Int) -> Int {
    return number + 1
  }


  var anotherNumber = NumberIncreaser.numberIncrementor(3)

}

另一种方法是使anotherNumber成为一个惰性属性,如下所示:

class NumberIncreaser {

  func numberIncrementor(number: Int) -> Int {
    return number + 1
  }


  lazy var anotherNumber: Int = self.numberIncrementor(3)

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM