質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

1回答

628閲覧

swiftのoptional型が分かりません

Narikura

総合スコア6

0グッド

0クリップ

投稿2020/08/07 04:41

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
xcodeで閏年判定アプリを作っていたら、以下のようなエラーが出ました。
また、 guard let number = input.text の部分でInt(input.text!)と打てば解決するのかもしれませんが!で強制アンラップをせずに(!を使わずに)実装したいです。

発生している問題・エラーメッセージ

Cannot convert value of type 'String' to expected argument type 'Int'

該当のソースコード

Swift

1 @IBAction func button(_ sender: Any) { 2 3 4 guard let number = input.text else { 5 result.text = "正しい数字を入力してください" 6 return 7 } 8 9     if ((number % 4 == 0) && (number % 100 != 0) || (number % 400 == 0)) { 10 11 result.text = String(number) + "年は閏年です" 12 13 }else{ 14 result.text = String(number) + "年は閏年ではありません" 15 16 }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

optional型がまだわかっていません。よろしくおねがします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

nil合体演算子(??)を使うのがすっきりと解決しそうに思えます。

Swift

1 guard let number = Int(input.text ?? "") else { 2 result.text = "正しい数字を入力してください" 3 return 4 }

nil 合体演算子は左辺値が nil だった場合には右辺値を返すようになっています。

つまり、input.textnil だった場合には、代わりに "" が Int 型のイニシャライザに代入されるようになります。

投稿2020/08/07 04:55

TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Narikura

2020/08/07 08:20

ご回答いただきありがとうございます。合体演算子を使った場合””が代入されるということでしたが””の間にコメントを入れればそれが代入されるという認識でよろしいですか?
TsukubaDepot

2020/08/07 09:27

まずは試されてみるのが一番良いのですが(結果は明確なので)、""の間に何らかの文字列を入れれば、左辺値が nil の場合に右辺値で定義した文字列が使われるようになります。右辺値は文字列である必要はなく、使う状況に応じて様々な型や式などを置くことも可能です。
Narikura

2020/08/07 12:21

理解しました。ご丁寧にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問