在Objective C中访问Swift的可选类型

时间:2014-10-04 04:26:48

标签: ios objective-c swift

我有一个混合(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中打印该值。有人知道如何优雅地处理这个问题吗?

1 个答案:

答案 0 :(得分:0)

您正在使用["envKey"]?.string。您不应使用["envKey"]?它不会解包AnyObject?

    return envDict["envKey"]?.string  //notice ?

相反,您应该选择将AnyObject投射到String

    return envDict["envKey"] as? String

as?会返回可选的String?