swift - 如何在 Swift 中使用嵌套的便利可失败初始值设定项检查 nil?

标签 swift initialization

class OAuthToken: NSObject, NSCoding {

var refreshToken: String?
var accessToken: String?
var scope: String?

convenience init?(refreshToken: String?, accessToken: String?, scope:String) {
    self.init()

    if let acutalRefreshToken = refreshToken as String? {
        self.refreshToken = acutalRefreshToken
    } else {
        return nil
    }
    if let actualAccessToken = accessToken as String? {
        self.accessToken = actualAccessToken
    }else {
        return nil
    }
    self.scope = scope
}

convenience init?(attributes: Dictionary<String,AnyObject>, scope: String) {
    var aRefreshToken: String!
    var anAccessToken: String?
    aRefreshToken = attributes["refresh_token"] as String?
    anAccessToken = attributes["access_token"] as String?
    let token = self.init(refreshToken: aRefreshToken, accessToken: anAccessToken, scope: scope) as OAuthToken // () is not convertible to OAuthToken
    if token != nil {
        storeInKeyChain()
    } else {
        return nil
    }
}
}

当你在另一个内部调用一个嵌套的可失败初始化器时,你如何检查一个可失败初始化器是否为 nil?

let token = self.init(refreshToken: aRefreshToken, accessToken: anAccessToken, scope: scope) 想要返回类型为 () 的对象,不能强制转换为我的课。我如何才能使用此模式并仅在实际创建成功时才将对象存储到钥匙串(keychain)?

最佳答案

我认为,当您调用父类(super class)的可失败初始化程序时,如果失败,它会隐式返回。

事实上关于Failable Initializers的文档指出:

If the superclass initialization fails because of an empty name value, the entire initialization process fails immediately and no further initialization code is executed

关于swift - 如何在 Swift 中使用嵌套的便利可失败初始值设定项检查 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27150329/

相关文章:

swift - 快速搜索带有圆角半径的栏

swift - PromiseKit:无法在处理程序之间调用自定义代码

java - 为什么我必须初始化 "j"?

c++ - 允许变量未初始化有什么好处?

c++ - 使用大小为 8 的未初始化值

iOS:编辑 TableView 中的项目问题

swift - Firebase 用户无法注销 - Swift

ios - Swift 导航栏搜索栏在单击时忽略搜索文本

Swift - 使用可选的 let

C89 - 使用灵活的字符数组和原型(prototype)初始化结构