【问题标题】:How to convert Int to int in swift?如何快速将 Int 转换为 int?
【发布时间】:2015-05-05 18:16:28
【问题描述】:

我有一个叫做 Int 类型的变量

var number = value!.integerValue as Int

现在我必须使用该值创建一个 NSNumber 对象。

我正在尝试使用这个构造函数

value = NSNumber(int: number)

,但它不起作用。

它期望原始类型 int,而不是我猜的 Int。

有人知道如何解决这个问题吗?

谢谢!

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    你只要value = number

    如您在文档中所见:

    https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/WorkingWithCocoaDataTypes.html

    本机 swift 数字类型通常直接桥接到 NSNumber。

    Numbers
    
    Swift automatically bridges certain native number types, such as Int and Float, to NSNumber. This bridging lets you create an NSNumber from one of these types:
    
    SWIFT
    
    let n = 42
    let m: NSNumber = n
    It also allows you to pass a value of type Int, for example, to an argument expecting an NSNumber. Note that because NSNumber can contain a variety of different types, you cannot pass it to something expecting an Int value.
    
    All of the following types are automatically bridged to NSNumber:
    
    Int
    UInt
    Float
    Double
    Bool
    

    Swift 3 更新

    在 Swift 3 中,这种桥接转换不再是自动的,您必须像这样显式转换:

    let n = 42
    let m: NSNumber = n as NSNumber
    

    【讨论】:

    • 谢谢你的帮助,迪玛!
    • 在带有 Swift 3.0.2 的 Ubuntu Linux 上,不会发生这种桥接。前两行代码给error: repl.swift:3:19: error: cannot convert value of type 'Int' to specified type 'NSNumber'
    • @ChrisPrince 在 Swift 3 中,这种桥接不再是自动的。您必须通过在作业中添加 as NSNumber 来转换为 NSNumber。将其添加到我的答案中。
    • 嗯。我认为在这方面,MacOS 和 Linux 上的 Foundation 是有区别的。另见stackoverflow.com/questions/43828307/…
    • NSNumber(value:1)
    【解决方案2】:

    问题是因为在 ObjC 中,int 是 32 位数字,integer 或 NSInteger 是 64 位数字。

    var number = value!.integerValue as Int
    

    数字是 Int 类型,对应于 ObjC 类型 NSInteger

    你现在尝试用这个来创建:

    value = NSNumber(int: number)
    

    采用Int32 或int 类型,从而导致失败。您有几个可行的选择。

    一个:

    value = NSNumber(int: Int32(number))
    

    两个(可能更好):

    value = NSNumber(integer: number)
    

    三个(可能是最好的):

    正如@Dima 指出的那样,您可以直接设置它,因为 swift 会自动转换:

    value = number
    

    【讨论】:

    • 你提到的第一个选项是错误的,我在问这个问题之前试过了。 NSNumber 初始化器只期望原始值。不过还是谢谢。
    • 没关系,我只是尝试了 Int 而不是 Int32,这就是我出错的原因。我的错!
    • 发生了! :) -- 我要删除我的 cmets,因为我们想通了
    【解决方案3】:

    对于 Swift 3,您必须使用:

    var convertedNumber = NSNumber(value: numberToConvert)
    

    【讨论】:

      猜你喜欢
      • 2020-01-25
      • 1970-01-01
      • 2016-03-12
      • 2015-11-13
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多