Подтвердить что ты не робот

Преобразование Int в UInt32 в Swift

Im создает клиент Tcp и, следовательно, использует CFStreamCreatePairWithSocketToHost, который ожидает UInt32 для второго параметра.

Вот пример того, что я пытаюсь сделать.

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
}

Я искал решение в течение некоторого времени, и я не могу найти его!

4b9b3361

Ответ 1

Вы можете сделать это легко:

var x = UInt32(yourInt)

Ответ 2

Ответ Nikos M. может переполняться, потому что Swift Int теперь 64 бит, и Swift будет сбой при переполнении инициализатора UInt32 по умолчанию. Если вы хотите избежать переполнения, используйте инициализатор truncatingBitPattern.

Если вы уверены, что ваши данные не будут переполняться, вы должны использовать инициализатор по умолчанию, потому что переполнение представляет неверные данные для вашего приложения. Если вы уверены, что ваши данные переполнены, но вам не нужно усекать (например, если вы строите хеш-значения или что-то еще), то вы, вероятно, захотите усечь.

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

Ответ 3

Это очень просто:

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

в вашем случае, просто пройдите

UInt32(Port)

Для порта не проблема, но в других случаях обязательно позаботьтесь о переполнении

Боковое примечание: в быстрой практической работе следует использовать переменные, используя нижний регистр верблюда, поэтому с первой буквой в нижнем регистре

Ответ 4

Еще проще: (интересно, почему они используют неподписанную функцию)

var x = Int32(yourInt)