Posted at

Swiftの#lineと#columnについて


基本

#lineはコード上の行番号、#columnはコード上の列番号を示す

let res1 = #line

let res2 = #column

print(res1) // 1
print(res2) // 12

行番号は1から数えるので、ファイルの先頭で#lineを呼んでいる場合は1になる。

列番号も同様に、1から数える。上の例では#の位置は12文字目なので12になる


列番号がおかしくなる時

let res1 = #line

let res2あ = #column

print(res1) // 1
print(res2あ) // 15

上の例の変数名res2に平仮名を一文字足してres2あとしてみた。

結果は15になる。

基本の項では、行番号と解説したが#columnの実態はutf8のバイト数である。

"let res2あ = #".utf8.count //15

#columnまでの文字をutf8にして数えると、#columnがいくつを指すか調べることができる。

(上の例では#を含めて#columnが返す値を計算している)


utf8とは

いろんな文字を表現するために、人間の読む文字とコンピュータの読む文字の対応表で変換する方式みたいなもの。

例えば上の例で出てきた「あ」は「E3 81 82」で3byte使う