小编Ste*_*han的帖子

在Swift 3转换之后,我无法摆脱错误:"不明确地使用'indexOfObject(passingTest :)'"

我正在使用NSArray的是indexOfObjects(passingTest :),但是在我将代码转换为Swift 3之后,我得到了错误:"不明确地使用'indexOfObject(passingTest :)'".我的代码在Swift 2.3下运行良好.

let indexesOfBubbleConstraints = bubbleConstraints.indexesOfObjects(passingTest: { (constraint, idx, stop) in
        if let view = constraint.firstItem as? UIView{
            return view.tag == usernameTag
        }
        else{
            return false
        }
    })
Run Code Online (Sandbox Code Playgroud)

对于斯威夫特3,我也不得不投constraintAnyObject,但这并不解决实际问题.

我最终使用func indexesOfObjects(options: NSEnumerationOptions = [], passingTest: (Any, Int, UnsafeMutablePointer<ObjCBool>) -> Bool)了一个空数组来获取选项,如下所示.这有效,但我仍然不明白为什么我的原始实现会出现"不明确..."错误.

let indexesOfBubbleConstraints = bubbleConstraints.indexesOfObjects(options: [], passingTest: { (constraint, idx, stop) in
        if let view = (constraint as AnyObject).firstItem as? UIView{
            return view.tag == usernameTag
        }
        else{
            return false
        } …
Run Code Online (Sandbox Code Playgroud)

compiler-errors ambiguous ios swift3 ios10

6
推荐指数
1
解决办法
2139
查看次数

stringWithUTF8String 自 iOS 8.2 更新以来返回 nil

我一直在使用 stringWithUTF8String 将我的 NSData 转换为 NSString,如下所示:

if ([[NSString stringWithUTF8String:[responsedata bytes]] isEqualToString:@"SUCCESS"]){
    dostuff...
}
Run Code Online (Sandbox Code Playgroud)

它运行良好;但是,自 8.2 iOS 更新以来,[[NSString stringWithUTF8String:[responsedata bytes]]返回 nil。

我通过使用以下代码解决了这个问题:

NSString *responseDataString = [[NSString alloc] initWithData:responsedata encoding:NSUTF8StringEncoding];

if ([responseDataString isEqualToString:@"SUCCESS"]){
    dostuff...
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下responsedata,打印的描述是相同的:<OS_dispatch_data: data[0x7aeb6500] = { leaf, size = 7, buf = 0x7c390360 }>

我的问题是:为什么第一个选项会返回 nil,为什么会在 iOS 8.2 更新后突然返回?

objective-c char-pointer ios nsstringencoding ios8.2

5
推荐指数
1
解决办法
1869
查看次数