2015-10-11 19 views
15

Objective-C’yi Swift’e dönüştürmeye çalışıyorum - buradaki hatanın biraz karıştığı ve bunun nasıl halledileceği. Belgeleri okudum ama yine de kafam karıştı - bu bir dönüştürücüden üretildi. Herhangi bir fikri olan var mı?İşlev bildirgesinde beklenen tanımlayıcı - Objective-C - Swift

Objective-C 
- (id) init 
{ 
    self = [super init]; 

    if (!self) 
     return nil; 

    self.cmRequestsQuery = [[NSMutableArray alloc] initWithCapacity:5]; 
    self.cmQueryIsRuning = NO; 
    self.requestCounter = 0; 
    self.serverOfflineOrBadResponse = NO; 
    self.userWasLoggedIn = NO; 
    self.needToSendPushNotiToken = NO; 
    self.noInternetConection = NO; 
    self.needToUpdateToken = NO; 

    [[reqOperationManager sharedManager] setDelegate:self]; 

    return self; 
} 


Swift 
func init() -> AnyObject { 
    self = super() 
    if !self { 
     return nil 
    } 
    self.cmRequestsQuery = NSMutableArray(capacity: 5) 
    self.cmQueryIsRuning = false 
    self.requestCounter = 0 
    self.serverOfflineOrBadResponse = false 
    self.userWasLoggedIn = false 
    self.needToSendPushNotiToken = false 
    self.noInternetConection = false 
    self.needToUpdateToken = false 
    reqOperationManager.sharedManager().setDelegate(self) 
    return self 
} 
+1

deneyin: super.init(); – eliasRuizHz

+0

Bu bir sorunla ilgilendi, yine de "func init() -> AnyObject {' ile "İşlev tanımında beklenen tanımlayıcı" ifadesinden şikayet ediyor. "Func" parçasının kaldırılması daha sonra hata veriyor "Bir satırdaki ardışık bildirimler bir ';'. AnyObject yönünden olduğuna inanıyorum. – user2836292

+0

Bkz. [Bu bağlantı] (http://stackoverflow.com/questions/24302288/how-to-write-init-method-in-swift) – eliasRuizHz

cevap

27

Swift ise init yöntemleri süper farklıdır çağırmak için hiçbir func anahtar kelime ve hiçbir dönüş değeri ve noktası var.

init() { 

İlk önce tüm örnek değişkenlerini başlatın.

self.cmRequestsQuery = NSMutableArray(capacity: 5) 
self.cmQueryIsRuning = false 
self.requestCounter = 0 
self.serverOfflineOrBadResponse = false 
self.userWasLoggedIn = false 
self.needToSendPushNotiToken = false 
self.noInternetConection = false 
self.needToUpdateToken = false 

Sonra süper çağrı - gerekirse - örneğini alır.

super.init() 

Sonra bu kadar self

reqOperationManager.sharedManager().setDelegate(self) 

kullanmak yöntemleri çağırmak. Eğer init() önce override anahtar kelime eklemek zorunda Bazı durumlarda

} 

.

Daha fazla bilgi için, Hızlı Dil Kılavuzundaki Başlatma ile ilgili bölümü okuyun. Buna değer.

+0

Yanıtın sonunda belirtilen "Hızlı Dil Kılavuzu'nda Başlatma" : https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html – AJP

0

Bu sorunu yaşadım, çünkü hızlı başlığımda hızlı üstbilgiyi (import "ProjectName-swift.h") içe aktarmaya çalışıyordum.

İlgili konular