Swift2.2からSwift3に移行しており、NSMakeRangeを書き換える際にエラーが発生しました。
そのエラーは解消できているのですが、処理でどうしても腑に落ちない点があります。

Swift2.2

let data = "あいうえお"dataUsingEncoding(NSShiftJISStringEncoding)
let subData = data?.subdataWithRange(NSMakeRange(0, 10))

Swift3

let data = "あいうえお".data(using: String.Encoding.shiftJIS) // 10bytes
let subData = data?.subdata(in: 0 ..< 10)

この場合、NSMakeRange(0, 10)なので0 ..< 11にして、0〜10の範囲を取得できるだろうと思っていたらエラーが発生し、以下のログが出力されました。

Termination app due to uncaught exception NSRangeException, reason: -[_MSInlineData subdataWithRange:]: range {0, 11} exceeds data length 10

今までの記憶では
0 ..< 10 => 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
0 ... 10 => 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
と考えていました。

なのでエラーとなったのが理解できません。

for~inでは今までの記憶通りの動きをしてくれたので、このdata(using:)の場合のみ違うということでしょうか?