はじめに
paizaだと、標準入力時のアンラップに!
使いがちで、
他の方法を使わなくなってしまいそうなので、網羅しておきます。
下記で書いたけど、忘却しました。。。
問題
標準入力
func readLine(strippingNewline: Bool = true) -> String?
パラメータ
strippingNewline
説明
trueの場合、結果から改行文字や改行文字の組み合わせが削除されます。
falseの場合、改行文字やその組み合わせは結果に含まれます。
デフォルト値: true
戻り値
型: String?(オプショナルの文字列)
説明:
標準入力から読み取った文字列を返します。
入力がない場合、nilを返します。
アンラップ
if let
let n = Int(readLine()!)!
var lines: [String] = []
for _ in 0..<n {
if let line = readLine() {
lines.append(line)
}
}
for a in lines {
print(a)
}
guard let
let n = Int(readLine()!)!
var lines: [String] = []
for _ in 0..<n {
guard let line = readLine() else {
continue
}
lines.append(line)
}
for a in lines {
print(a)
}
強制アンラップ
let n = Int(readLine()!)!
var lines: [String] = []
for _ in 0..<n {
var line = readLine()!
lines.append(line)
}
for a in lines {
print(a)
}
メモ
readLine()
は入力がない場合、nilを返すことを念頭に置くと、
var lines: [String] = []
で既にnil
を配列からはじいてるので、
while let
使った方が楽かもしれないとわかりました。
入力がnil
になると自動でwhile
がfalse
になって、繰り返しが止まってくれるため。
var lines: [String] = [] // [String?]じゃないので、nil入らない
while let line = readLine() {
lines.append(line)
}