Ios 错误:Int不能转换为NSRange
我得到了一个错误: int不能转换为NSRange 在Ios 错误:Int不能转换为NSRange,ios,swift,nspredicate,nsrange,Ios,Swift,Nspredicate,Nsrange,我得到了一个错误: int不能转换为NSRange 在变量范围上:NSrange=0: let predicate = NSPredicate(block: { (city: AnyObject!, b: [NSObject : AnyObject]!) -> Bool in var range:NSRange = 0; //convert error happens here on 0 if city is NSString {
变量范围上:NSrange=0
:
let predicate = NSPredicate(block: { (city: AnyObject!, b: [NSObject : AnyObject]!) -> Bool in
var range:NSRange = 0; //convert error happens here on 0
if city is NSString {
range = city.rangeOfString(searchBarText, options: NSStringCompareOptions.CaseInsensitiveSearch)
}
return range.location != NSNotFound
})
关于如何解决这个问题有什么想法吗?您的init语句是错误的
NSRange
是一个具有位置
和范围
值的结构。改为:
var range = NSMakeRange(NSNotFound, 0)
你的初始声明是错误的
NSRange
是一个具有位置
和范围
值的结构。改为:
var range = NSMakeRange(NSNotFound, 0)
NSRange
是一个struct
,包含成员location
和length
,而不是Int
使用初始值设定项
var range: NSRange = NSRange(location:0, length:0)
还是方便功能
var range: NSRange = NSMakeRange(0, 0)
NSRange
是一个struct
,包含成员location
和length
,而不是Int
使用初始值设定项
var range: NSRange = NSRange(location:0, length:0)
还是方便功能
var range: NSRange = NSMakeRange(0, 0)
我知道存在工厂方法,但删除了命名参数。我更喜欢更详细的构造函数,它可以消除参数:var range=NSRange(位置:0,长度:1)上的歧义。这是正确的答案,因为对于“nil”或无效的NSRange,应该使用NSNotFound。您不应该使用0作为位置,因为这是一个有效的索引,这使它成为一个有效的范围。如果查看NSNotFound的值,您将看到它是NSIntegerMax,而不是0。我知道存在工厂方法,但删除了命名参数。我更喜欢更详细的构造函数,它可以消除参数:var range=NSRange(位置:0,长度:1)上的歧义。这是正确的答案,因为对于“nil”或无效的NSRange,应该使用NSNotFound。您不应该使用0作为位置,因为这是一个有效的索引,这使它成为一个有效的范围。如果查看NSNotFound的值,您将看到它是NSIntegerMax,而不是0。