type protocol multiple has generic associated swift type-conversion

has - swift class multiple protocols



Convertir Int a UInt32 en Swift (4)

Aún más fácil: (preguntándose por qué usan la función sin firmar)

var x = Int32(yourInt)

Estoy creando un cliente Tcp y, por lo tanto, CFStreamCreatePairWithSocketToHost usando CFStreamCreatePairWithSocketToHost que espera un UInt32 para el segundo parámetro.

Aquí hay una muestra de lo que estoy tratando de hacer:

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 }

Hace tiempo que busco una solución, ¡y parece que no puedo encontrar una!


Es muy sencillo:

let int: Int = 40 let uint = UInt32(i)

en tu caso, solo pasa

UInt32(Port)

Para un puerto no es un problema, pero en otros casos, asegúrese de tener cuidado de desbordamiento

Nota al margen : en swift es una buena práctica nombrar las variables con una caja inferior de camello, así que con la primera letra en minúscula


Puedes hacerlo fácilmente:

var x = UInt32(yourInt)


La respuesta de Nikos M. podría desbordarse porque los Swift Int s tienen 64 bits ahora, y Swift se bloqueará cuando se desborde el inicializador UInt32 predeterminado. Si desea evitar el desbordamiento, use el inicializador truncatingBitPattern .

Si está seguro de que sus datos no se desbordarán, entonces debería usar el inicializador predeterminado porque un desbordamiento representa datos no válidos para su aplicación. Si está seguro de que sus datos se desbordarán, pero no le importa el truncamiento (como si está creando valores de hash o algo así), es probable que desee truncarlos.

let myInt: Int = 576460752303423504 let myUInt32 = UInt32(truncatingBitPattern: myInt)