Ожидаемый идентификатор в объявлении функции - 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.