如何快速将 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 位数字,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)
【讨论】:
以上是关于如何快速将 Int 转换为 int?的主要内容,如果未能解决你的问题,请参考以下文章
iOS:将 UnsafeMutablePointer<Int8> 快速转换为字符串?