Swift3.0以及IOS10,xcode8使用遇到的一些问题

1.问题:遇到Expression of type 'UIViewController?' is unused的警告

let nv = self.presentingViewController as? UINavigationController
nv?.popViewController(animated: false)

解决:

let nv = self.presentingViewController as? UINavigationController
_ = nv?.popViewController(animated: false)

因为在swfit3中规定,所有有返回值的方法,都需要捕获返回值.
除非在方法定义时,声明"@discardableResult"
例如:

@discardableResult func getValue()->Int{
    return 3
}
getValue()

这样在被调用时,即使不捕获返回值一样不会出现警告

2.问题:String.Index.distance
代码如下,在swift2.3中运行没有问题,但在swift3.0中,distance的方法就不能这么调用了

....
var text = "this is a text!"
let start = text.startIndex.advancedBy(item.range.location - dIndex)
let end = text.startIndex.advancedBy(item.range.location + item.range.length - dIndex)
text.removeRange(start..

将distance的调用改为下面的调用方法,同时注意text.removeRange的位置,因为text.characters.distance方法需要保证start,end表示的索引必须是text.characters.count以内的值,否则会报错.所以如果先运行的是text.removeSubrange将可能导致start或end越界.

var text = "this is a text!"
let start = text.characters.index(text.startIndex, offsetBy: item.range.location - dIndex)
let end = text.characters.index(text.startIndex, offsetBy: item.range.location + item.range.length - dIndex)
indexes.append(text.characters.distance(from: text.startIndex, to: start))
let tmpDIndex = text.characters.distance(from: start, to: end) 
text.removeSubrange(start..

你可能感兴趣的:(Swift3.0以及IOS10,xcode8使用遇到的一些问题)