Ожидаемый идентификатор в объявлении функции - Objective-C для Swift

Я пытаюсь преобразовать мой 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

В Swift init методы не имеют ключевого слова func и не имеют возвращаемого значения, а точка для вызова супер отличается.

init() {

Сначала инициализируйте все переменные экземпляра.

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

Затем вызовите super - если требуется - чтобы получить экземпляр.

super.init()

Затем вызовите методы, которые используют self

reqOperationManager.sharedManager().setDelegate(self)

Что это.

}

В некоторых случаях вам нужно добавить ключевое слово override до init().

Подробнее читайте в главе об инициализации в руководстве Swift Language Guide. Это того стоит.

Ответ 2

У меня была эта проблема, потому что я пытался импортировать swift-заголовок (импортировать "ProjectName-swift.h" ) в моем классе swift.