15

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
}
2
  • That took care of one issue, it still complains at func init() -> AnyObject { with "Expected identifier in function declaration. Removing the "func" part then brings the error "Consecutive declarations on a line must be separated by ';'. I believe it is from the AnyObject aspect. Commented Oct 11, 2015 at 18:03
  • See This link Commented Oct 11, 2015 at 18:18

2 Answers 2

27

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.

Sign up to request clarification or add additional context in comments.

1 Comment

The "Initialization in the Swift Language Guide" mentioned at the end of the answer: developer.apple.com/library/ios/documentation/Swift/Conceptual/…
0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.