【发布时间】:2017-11-07 08:15:20
【问题描述】:
我已经用obj-c 写了 1.5 年了,它是一种很好的语言.. 所以我今天看到一篇关于 swift 的中型文章,真的很关注它,现在我正在尝试转换我所有的obj-c代码swift,幸运的是,这部分的一切都完成了..
NSString *path = [[NSBundle mainBundle] pathForResource:@"list" ofType:@"plist"];
NSArray *plistData = [NSArray arrayWithContentsOfFile:path];
NSPredicate *filter = [NSPredicate predicateWithFormat:@"english ==[c] %@", self.userQuery.text]; // something like "Abbey"
NSArray *filtered = [plistData filteredArrayUsingPredicate:filter];
NSLog(@"found matches: %@ : %@", filtered,[filtered valueForKey:@"kurdi"]);
if (filtered.count>0) {
NSDictionary *dic = filtered[0];
self.theMeaningLabel.text = dic[@"kurdi"];
} else {
self.theMeaningLabel.text = @"Yay!";
}
我无法将其正确转换为新的swift 4,它会产生随机错误
编辑
经过几次搜索,我可以只写两行代码 这是我的快速代码
var path: String? = Bundle.main.path(forResource: "list", ofType: "plist")
var plistData = [Any](contentsOfFile: path!)
var filter = NSPredicate(format: "english ==[c] %@", searchText)
// something like "Abbey"
var filtered = plistData?.filter { filter.evaluate(with: $0) }
print("found matches: \(filtered) : \(filtered?.value(forKey: "kurdi"))")
if filtered?.count > 0 {
var dic = filtered[0]
// theMeaningLabel.text = dic["kurdi"]
}
else {
//theMeaningLabel.text = "Yay!"
}
但得到
参数标签 '(contentsOfFile:)' 不匹配任何可用的重载
最终编辑
var path = Bundle.main.path(forResource:"list", ofType: "plist")
var plistData = NSArray(contentsOfFile: path!)
let filter = NSPredicate(format: "english ==[c] %@", searchText)
var filtered = plistData?.filtered(using: filter)
// [error 9:10] no viable alternative at input 'NSLog(@"found matches: %@ : %@"'
if filtered?.count > 0 {
var dic = filtered![0]
// theMeaningLabel.text = dic["kurdi"]
}
else {
// theMeaningLabel.text = "Yay!"
}
上面的代码没问题,但是出现了一个错误
if filtered?.count > 0 { // here
var dic = filtered![0]
// theMeaningLabel.text = dic["kurdi"]
}
else {
// theMeaningLabel.text = "Yay!"
}
得到
二元运算符“>”不能应用于“Int?”类型的操作数和“诠释”
【问题讨论】:
-
不要显示 Objective-C,显示 Swift 和你遇到的错误。
-
@Paulw11,我实在想不通,卡在谓词格式中,等待有人给出正确的干净代码
-
谓词格式完全相同,因为它是基础库的一部分,而不是 Swift 或 Objective-C。
-
@VishalPatel,不要在没有真正阅读双方的情况下标记问题,你给出了错误的代码,我很感激,但这不是重复的,我自己解决了!
标签: ios objective-c swift