2015-04-10 17 views
5

Yukarıdaki kodu almaya devam etmeme rağmen bu kodu bir sınıfta kullanmaya çalışıyorum.Bir sınıf örneğinin tüm depolanan özellikleri, bir başlatıcıdan sıfırlanmadan önce başlatılmalıdır

let filePath: NSString! 
    let _fileHandle: NSFileHandle! 
    let _totalFileLength: CUnsignedLongLong! 




init?(filePath: String) 
{ 


    if let fileHandle = NSFileHandle(forReadingAtPath: filePath) 
    { 

     self.filePath = filePath 
     self._fileHandle = NSFileHandle(forReadingAtPath: filePath) 
     self._totalFileLength = self._fileHandle.seekToEndOfFile() 
    } 
    else 
    { 

     return nil //The error is on this line 
    } 
} 

Bunu düzeltmek nasıl yüzden bu hatayı alamadım:

All stored properties of a class instance must be initialized before returning nil from an initializer

cevap

7

Bunu değişkenlerle çalışmak yapabilir ve (özelliklerini erişmeden önce self oluşturmak için) super.init() çağrısı:

class Test: NSObject { 
    var filePath: NSString! 
    var _fileHandle: NSFileHandle! 
    var _totalFileLength: CUnsignedLongLong! 

    init?(filePath: String) { 
     super.init() 
     if let fileHandle = NSFileHandle(forReadingAtPath: filePath) 
     { 
      self.filePath = filePath 
      self._fileHandle = NSFileHandle(forReadingAtPath: filePath) 
      self._totalFileLength = self._fileHandle.seekToEndOfFile() 
     } 
     else 
     { 
      return nil 
     } 
    } 
} 

Ama sabitleri ile sürümüne sopa planlıyorsanız, o zaman benim konfor bölgesi, ve belki this answer yardımcı olabilir.

+0

'super.init()' sorun oldu - thx! –