Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Expected identifier in function declaration - Objective-C to Swift

I'm trying to convert over my Objective-C to Swift - a little confused on the error here and how to take care of it. I've been reading through the documentation but still confused - this was generated from a converter. Anyone have any ideas?

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
}
like image 529
user2836292 Avatar asked Oct 11 '15 17:10

user2836292


1 Answers

In Swift init methods have no func keyword and no return value and the point to call super is different.

init() {

First initialize all instance variables.

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

Then call super – if required – to get the instance.

super.init()

Then call the methods which use self

reqOperationManager.sharedManager().setDelegate(self)

That's it.

}

In some cases you have to add the override keyword before init().

For more details please read the chapter about Initialization in the Swift Language Guide. It's worth it.

like image 138
vadian Avatar answered Oct 27 '22 14:10

vadian