【问题标题】:Cannot convert value of type 'Int64?' to expected argument type 'Int'无法转换“Int64”类型的值?到预期的参数类型'Int'
【发布时间】:2017-11-27 15:13:57
【问题描述】:

当我尝试将 job?.id (an Int64) 作为 Int 参数传递时(虽然我知道它不是那么大),swift 编译器提示此错误,我尝试了几种方法来转换它,但没有成功:

Cannot convert value of type 'Int64?' to expected argument type 'Int'

我的代码:

Job.updateJobStatus(token: tok, jobId: job?.id, status:JobSatus.canceled) { (result, error) in
        if result != nil
        {

        }
        else if error != nil
        {

        }
    }

【问题讨论】:

标签: swift casting int int64


【解决方案1】:

你可以很容易地去喜欢:

let int64Value: Int64 = 123456
let intValue = NSNumber(value: int64Value).intValue

【讨论】:

    【解决方案2】:

    这与https://stackoverflow.com/a/32793656/8236481有关

    Swift 3 引入了可失败的初始化器来安全地将一种整数类型转换为另一种。通过使用 init?(exactly:) 您可以传递一种类型来初始化另一种类型,如果初始化失败,它会返回 nil。返回的值是可选的,必须以通常的方式展开。

    Int(exactly: yourInt64)
    

    【讨论】:

      【解决方案3】:

      您有两个问题需要解决。首先,您需要处理 job 是可选的。然后您需要处理 job.idjobId 参数不同的数据类型。

      对于可选问题,您有很多选择:

      guard let job = job else { return }
      
      Job.updateJobStatus(token: tok, jobId: Int(job.id), status:JobSatus.canceled) { (result, error) in
          if let result = result {
          } else if let error = error {
          }
      }
      

      或者您可以回退到默认值:

      Job.updateJobStatus(token: tok, jobId: Int(job?.id ?? 0), status:JobSatus.canceled) { (result, error) in
          if let result = result {
          } else if let error = error {
          }
      }
      

      请注意,您确实应该让jobId 参数与id 属性具有相同的数据类型。如果值太大而无法转换,则从Int64Int 的转换可能会失败。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-12
        • 1970-01-01
        • 2016-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-11
        相关资源
        最近更新 更多