我正在尝试将以下代码转换为 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/