我有一个混合(Swift / Objective C)iOS项目。这是我的iOS应用中的Swift代码段:
let envPlist = NSBundle.mainBundle().pathForResource("environment", ofType: "plist")
let envDict = NSDictionary(contentsOfFile: envPlist!)
class BuildEnv: NSObject {
internal class func envKey() -> String? {
return envDict["envKey"]?.string
}
}
当我在日志中的Objective C中打印envKey时:
NSLog(@"BUILDENV ENV = %@", [BuildEnv envKey]);
我得到了:
BUILDENV ENV = (null)
但如果我将Swift功能更改为:
internal class func envKey() -> String {
return envDict["envKey"] as String!
}
然后我能够在Objective C中打印该值。有人知道如何优雅地处理这个问题吗?
答案 0 :(得分:0)
您正在使用["envKey"]?.string
。您不应使用["envKey"]?
它不会解包AnyObject?
。
return envDict["envKey"]?.string //notice ?
相反,您应该选择将AnyObject
投射到String
return envDict["envKey"] as? String
as?
会返回可选的String?