キノコが何か作るブログ

ゲーム・ドット絵・アプリなどを作ります

MENU

paizaのDランク問題でつまずくザコ

paizaを始めた

swiftの練習をするためにpaizaを始めました。
とりあえずDランクの問題を解いてswiftに慣れようと思ったのですが、なぜかうまくいきません。

何度やっても「型が違う」と怒られるので、型を確認してみることに。
f:id:mizukinoko:20200422180639p:plain

Stringじゃん
整数で入力するってpaiza側が言ってたのに↓

f:id:mizukinoko:20200422180824p:plain
でこの後input_lineをInt型に直して再度やってみたのですが、なぜか
error: operator function '..<' requires that 'Optional.Stride' conform to 'SignedInteger'
と怒られます。

ググっても解決方法が出てこないので困っていたのですが、ふとinput_line()の末尾に「!」が付いていることに気づきました。
なんで「!」なんてついてるんだ?と疑問に思いましたが、とりあえずなんか付けたら動きそうなので付けてみることに。
最終的なコードがこちら。

// 自分の得意な言語で
// Let's チャレンジ!!

var input_line=readLine()!
let input = Int(input_line)!

var answer:String = ""

for i in 0..<input {
    answer = answer + "*"
}

print(answer)

通りました

f:id:mizukinoko:20200422181747p:plain
やっぱり「!」が関係あるようです。

後ろについてる「!」はなんなのか

変数の中身が宣言の型と違うことを許容する意味があるらしいですが、詳しいことはよくわかりませんでした。
この理屈で行くと今回エラーが出たのは、最初にinput_lineに入力されたのはString型なので途中でInt型に直すには「!」がないと許容できないってことなんでしょうか。

しかし、もしそうだとするなら型変換の時に必ず「!」を付けないといけないことになります。
普通に考えてそんな気持ち悪いことをするとは思えないんですよね。

!の意味もそうですが、何はともあれ、エラーの内容もよく理解してないので、そっちを先に理解しようと思います。

プライバシーポリシー