函数声明中的预期标识符 - Objective-C to Swift

use*_*292 15 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
}
Run Code Online (Sandbox Code Playgroud)

vad*_*ian 27

在Swift init方法中没有func关键字,也没有返回值,调用super的点不同.

init() {
Run Code Online (Sandbox Code Playgroud)

首先初始化所有实例变量.

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
Run Code Online (Sandbox Code Playgroud)

然后调用super - 如果需要 - 来获取实例.

super.init()
Run Code Online (Sandbox Code Playgroud)

然后调用使用的方法 self

reqOperationManager.sharedManager().setDelegate(self)
Run Code Online (Sandbox Code Playgroud)

而已.

}
Run Code Online (Sandbox Code Playgroud)

在某些情况下,您必须先添加override关键字init().

有关更多详细信息,请阅读Swift语言指南中有关初始化的章节.这很值得.