如何快速将 Int 转换为 int?

Posted

技术标签:

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

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

var number = value!.integerValue as Int

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

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

value = NSNumber(int: number)

,但它不起作用。

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

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

谢谢!

【问题讨论】:

【参考方案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 是有区别的。另见***.com/questions/43828307/… NSNumber(value:1)【参考方案2】:

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

var number = value!.integerValue as Int

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

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

value = NSNumber(int: number)

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

一个:

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)

【讨论】:

以上是关于如何快速将 Int 转换为 int?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:将 UnsafeMutablePointer<Int8> 快速转换为字符串?

在 Int 中快速转换 Char

如何将 std::string 转换为 int?

整数除法('Int' 不能转换为 'Double')

如何在 Java 中将 Integer[] 转换为 int[] 数组?

量化交易中,如何快速把股票代码转换成Int整形?