Swift 3.0およびIOS 10、xcode 8の使用で発生したいくつかの問題

1675 ワード

1.質問:Expression of type'UIDIewControllerに遭遇しましたか?is unusedの警告
let nv = self.presentingViewController as? UINavigationController
nv?.popViewController(animated: false)

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

swfit 3では、戻り値のあるメソッドはすべて、戻り値を取得する必要があるため、メソッド定義時に「@discardableResult」と宣言しない限り、例えば、
@discardableResult func getValue()->Int{
    return 3
}
getValue()

これにより、呼び出されたときに戻り値を取得しなくても警告は表示されません.
2.質問:String.Index.distanceコードは以下の通りで、swift 2.3で実行しても問題ありませんが、swift 3.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.cont以内の値でなければなりません.そうしないと、エラーが発生します.そのため、先に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..