Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 错误:Int不能转换为NSRange_Ios_Swift_Nspredicate_Nsrange - Fatal编程技术网

Ios 错误: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 {

我得到了一个错误:

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 {
                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。