我正在创建一个Tcp客户端,因此使用期望用于第二个参数的UInt32的CFStreamCreatePairWithSocketToHost
。
以下是我尝试做的一个示例。
func initNetwork(IP: String, Port: Int) {
// relevant stuff
//Convert Port:Int to UInt32 to make this shit work!
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, IP as NSString , Port , &readStream, &writeStream)
// Irelevant stuff
}
我一直在寻找解决方案已有一段时间了,我似乎无法找到一个!
答案 0 :(得分:88)
您可以轻松完成:
var x = UInt32(yourInt)
答案 1 :(得分:17)
Nikos M.'s answer可能会溢出,因为Swift Int
现在是64位,当默认的UInt32初始化程序溢出时Swift会崩溃。如果您想避免溢出,请使用the truncatingBitPattern
initializer。
如果您确定数据不会溢出,则应使用默认初始值设定项,因为溢出表示应用程序的无效数据。如果您确定您的数据会溢出,但您不关心截断(例如,如果您正在构建哈希值或其他内容),那么您可能希望截断。
let myInt: Int = 576460752303423504
let myUInt32 = UInt32(truncatingBitPattern: myInt)
答案 2 :(得分:6)
这很简单:
let int: Int = 40
let uint = UInt32(i)
在你的情况下,只需传递
UInt32(Port)
对于端口不是问题,但在其他情况下一定要注意溢出
旁注:在swift中,使用较低的驼峰案例命名变量是个好习惯,所以第一个字母是小写的
答案 3 :(得分:6)
更容易:(想知道为什么他们使用unsigned func)
var x = Int32(yourInt)