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

SWIFT ONLY - Чтение из NSInputStream

Не могли бы вы объяснить мне, как правильно читать из NSInputStream?

Я не мог понять, что такое UnsafePointer и как его использовать (также для UnsafeArray).

Функция чтения NSInputStream получает CMutablePointer, который может быть заполнен объектом UnsafePointer.

Это настоящий беспорядок, сравнимый с потоками Java.

Что вы порекомендовали бы?

Спасибо!

4b9b3361

Ответ 1

Я сам это понял.

Посмотрите на этот простой код:

let data: NSData = "Jonathan Yaniv.".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
let stream: NSInputStream = NSInputStream(data: data)

var buffer = [UInt8](count: 8, repeatedValue: 0)

stream.open()

if stream.hasBytesAvailable {
    let result :Int = stream.read(&buffer, maxLength: buffer.count)
}

//  result = 8 -- because of the size of the buffer.
//  buffer contains the first 8 bytes repreenting the word "Jonathan"

Объяснение: Подпись метода чтения:   stream.read(< #buffer: UnsafeMutablePointer # > , maxLength: < #Int # > )

Он получает UnsafeMutablePointer в качестве первого параметра, что означает, что метод ожидает получить POINTER для массива типа UInt8 - НЕ самого массива

Поэтому мы добавляем и обозначаем перед именем буферной переменной. & buffer == указатель на объект массива UInt8 с именем buffer.