2014-07-19 14 views
11

Lütfen bir NSInputStream'den nasıl düzgün okuduğumu açıklayabilir misiniz?SADECE SWIFT - NSInputStream'den okuma

UnsafePointer nedir ve ne işe yaradığını anlayamadım (UnsafeArray için de).

NSInputStream okuma işlevi, bir UnsafePointer nesnesiyle doldurulabilen bir CMutablePointer alır.

Java Akışlarına göre gerçek bir karmaşa.

Ne önerirsiniz?

Teşekkür ederiz!

+1

Bu karışıklık varsa, lütfen _Java_ ile karşılaştırmayın ve bunun yerine _Swift_'ın temellerini okuyun: https://developer.apple.com/swift/resources/ – holex

cevap

20

Kendim anladım. bu basit kodu

Görünüş:

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" 

Açıklama: stream.Read (< #buffer: UnsafeMutablePointer #>, maxLength: < # Int #>)

yöntem imzası okumak

Bir UnsafeMutablePointer'ı ilk parametre olarak alır; bu, yöntemin bir dizi UInt8 - dizisine POINTER almayı beklediği anlamına gelir. NOT, dizinin kendisi

Bu nedenle, arabellek değişkeninin adından önce & gösterimini ekledik. & buffer == UInt8 array nesnesinin arabelleği işaretçisi.