#2 「オプショナル型」Swiftを分かりたい(プログラミング素人の備忘録)
どうも。
久しぶりにプログラミングをやっていこうと思います。ケッシテC#ニアキタワケデハナイデスヨ。
注意
この記事(今シリーズ)は初心者がSwiftをかじりながら、備忘録のような形で投稿していく予定です。
そのため、今シリーズ全体を通して信憑性は非常に低いです。
また専門の方などから見れば、無茶苦茶なこと、おかしなことをしているかもしれませんがご容赦ください。
前回
オプショナル型(Optional型)とは
nil(空白)を 許容する型。
使用例
var str: String?
String型かつオプショナル型ということだそう。String型をオプショナル型でラッピングしているイメージ。
アンラップとは
オプショナル型を剥がすこと。
強制アンラップ
値に!をつける。
var str: String? = "hello"
print(str!)
こうすることで強制的にアンラップできます。ただstrがnilの場合プログラムが止まるそう。(おそらくnilを操作しようとしたから)そのため非推奨だそう。
??演算子のアンラップ
値に??をつける。
var str: String? = "hello"
print(str ?? "おはよう") //もしstrがnilだったらおはようが代入される
これはstrがnilの場合は"おはよう"が代入されるよう。使い道は限られそうだけど!よりは安全そう。
if let
if文でnil判定してnilの代入を回避するそう。
var str: String? = "hello"
if let s = str {
print(s)
}else{ //これはなくてもいい
print("nilです")
}
if文の条件式で定数に代入(別に変数でもいいのか?)して偽なら実行されないという安全設計。
guard let
もしnilならそれ以降のコードを実行しないそう
func str_() -> String{
guard let s = str else { return"" } // nilの場合は""を返す
return s //nilの場合は実行されない
}
これはString型を返す関数ですが、もしs = strにてstrがnilの場合は""を返すよう。
前回のコード
前回もちらっと出てきたこれ、if letしてたんですね。
var Repeat = false // 繰り返し判定用の変数
repeat {
print("値を入力してください。")
let input_Str = readLine()!
if let input_num = Double(input_Str){
Repeat = false
return input_num
}else{
Repeat = true //もし変換できなった場合は繰り返す
print("正しい値を入力してください。")
}
}while Repeat == true
readline()!
swiftでは標準入力(readline)はoptional型でラップされて返ってくるそうなので、アンラップする必要がある。
まとめ
個人的にはif letのアンラップがやりやすかったのでこれ使っていこうかなといった感じです。
アンラップを原理的に(?)理解するにはデータ型とかもっと勉強しないといけなそうですが、とりあえず使えるようにはなったと思うのでokだと思ってます。
次回
演算とか…