ios - 'NSDictionary ?' is not convertible to ' NSCopying'

标签 ios swift

我正在尝试将以下代码转换为 Swift

- (id)init {
    self = [super init];

    if (self) {
        // Fetch Current Configuration
        NSBundle *mainBundle = [NSBundle mainBundle];
        self.configuration = [[mainBundle infoDictionary] objectForKey:@"Configuration"];

        // Load Configurations
        NSString *path = [mainBundle pathForResource:@"Configurations" ofType:@"plist"];
        NSDictionary *configurations = [NSDictionary dictionaryWithContentsOfFile:path];

        // Load Variables for Current Configuration
        self.variables = [configurations objectForKey:self.configuration];
    }

    return self;
}

这是 Swift 版本:

private var configuration: String?
private var properties: NSDictionary?

init() {
    println("Load configurations")
    let mainBundle = NSBundle.mainBundle()
    self.configuration = mainBundle.infoDictionary?["Configuration"] as? String

    let path = mainBundle.pathForResource("Configurations", ofType: "plist")

    var configurations = NSDictionary(contentsOfFile: path!)
    self.properties = configurations[configuration!] as? NSDictionary
}

但是最后一行给了我两个编译错误:

Configuration.swift:25:27: 'NSDictionary?' is not convertible to 'NSCopying'
Configuration.swift:25:14: Cannot assign to immutable value of type 'NSDictionary?'

我尝试了对代码进行各种修改,as!NSMutableDictionary 等。但就是无法编译。有什么建议吗?

最佳答案

您的 configurations 字典是可选的,因此您必须在使用时打开它,因此请替换此行:

self.properties = configurations[configuration!] as? NSDictionary

用这一行:

self.properties = configurations![configuration!] as? NSDictionary

您需要在使用可选词典时添加!

或者你可以使用安全的 if let 来做到这一点:

if let config = configurations![configuration!] as? NSDictionary {
   self.properties = config
}

关于ios - 'NSDictionary ?' is not convertible to ' NSCopying',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870037/

相关文章:

ios - 使用 xcode 8 上传后,应用程序未显示在事件选项卡中

ios - Chartboost Swift 实现 : CoreData: warning: Unable to load class named 'CBHTTPRequestEntity' for entity 'CBHTTPRequestEntity'

ios - 选择推送通知的显示参数

ios - Swift 动态转换失败 UIPageViewController

ios - swift:reloadData后tableview不起作用

swift - SpriteKit - 除了底部和顶部之外的所有侧面的边框

ios - 在 iOS 设备上检测事件的 AVAudioSession

ios - 无法将我的 iOS 应用程序下载到我的 iPhone 5s

ios - 停止仿射变换应用于 subview

arrays - 变量共享同一个数组实例 - Javascript 类似数组