gpt4 book ai didi

ios - 读取 info.plist : inferred to have type AnyObject which may be unexpected

转载 作者:搜寻专家 更新时间:2023-10-31 08:13:24 24 4
gpt4 key购买 nike

我在我的 info.plist 文件中插入了一个 integer,显然,我想从我的 Swift UIViewController 中检索它。代码非常简单:

class MyController: UIViewController {

private let value: Int

required init(coder aDecoder: NSCoder) {

if let info = NSBundle.mainBundle().objectForInfoDictionaryKey("v"){
value = info.integerValue
}else{
value = 0
}

super.init(coder: aDecoder)
}

//other auto-generated-methods
//...

}

函数 objectForInfoDictionaryKey 返回一个 AnyObject? 可选的,我对此很满意。但是编译器对我说

Constant "info" inferred to have type AnyObject which may be unexpected

我该如何解决这个警告,我为什么要担心函数返回 AnyObject 的事实? <-- 这是一个问号...大声笑

即使它返回一个 AnyObject,如果对象不是 nil,我也可以向下转换它。我不明白为什么编译器会提示这个。

最佳答案

Xcode 通常会警告 推断AnyObjectAnyObject?。您可以添加类型注释(如 Xcode 所建议的那样)来消除警告:

if let info : AnyObject = ...

我只能推测为什么 Xcode 会这样,但有一个原因可能是你“被迫”意识到 info 可能是 any 对象类型可能不是您所期望的那样。

所以即使 info.integerValue 编译,如果对象不是,它可能会在运行时崩溃预期的类型。在您的情况下,如果字典值不是 NSNumberNSString然后 info.integerValue 抛出异常。

安全的方法是进行可选的转换:

if let info = NSBundle.mainBundle().objectForInfoDictionaryKey("v") as? NSNumber {
value = info.integerValue
} else {
value = 0
}

NSNumberInt 之间的自动重新映射你也可以这样写

if let info = NSBundle.mainBundle().objectForInfoDictionaryKey("v") as? Int {
value = info
} else {
value = 0
}

或者作为使用 nil-coalescing 运算符的单行 ??:

let value = NSBundle.mainBundle().objectForInfoDictionaryKey("v") as? Int ?? 0

关于ios - 读取 info.plist : inferred to have type AnyObject which may be unexpected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27767548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com