ТОЛЬКО SWIFT Чтение из NSInputStream

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

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

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

Это настоящий беспорядок по сравнению с Java Streams.

Что ты посоветуешь ?

Благодарю вас!


person johni    schedule 19.07.2014    source источник
comment
если это беспорядок, пожалуйста, не сравнивайте его с Java, а вместо этого прочитайте основы Swift: developer.apple.com/swift/resources   -  person holex    schedule 13.08.2014


Ответы (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"

Объяснение: сигнатура метода read: stream.read(‹#buffer: UnsafeMutablePointer#>, maxLength: ‹#Int#>)

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

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

person johni    schedule 13.08.2014
comment
Действительно трудно найти в документации, что использование оператора & с массивом возвращает UnsafeMutablePointer‹UInt8›. Без этих знаний очень сложно понять, как сделать то, что ты сделал. Тогда спасибо! - person Michael Welch; 13.07.2018