user2836292
user2836292

Reputation: 305

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
}

Upvotes: 15

Views: 10474

Answers (2)

smukamuka
smukamuka

Reputation: 1537

I had this problem because I was trying to import the swift header (import "ProjectName-swift.h") in my swift class.

Upvotes: 0

vadian
vadian

Reputation: 285079

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.

Upvotes: 27

Related Questions