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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

1回答

1177閲覧

SwiftのOptionalの記法

shitumontarou

総合スコア7

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/02/20 11:45

編集2016/02/20 11:47

あるクラスで以下のようなクラスでプロトコルを作ってその処理を書こうとしました。
そしたらエラーが出てXcodeの言われるがまま!をつけたのですが何故関数呼び出し時の()の前に!をつけなければいけないのかがわからず、検索しても出てこないし、困ったのでこちらで質問させていただきます。

  • 知りたいこと

    • なぜ()の前に!をつける必要があるのか
  • ソースコード

swift

1 2import UIKit 3 4@objc protocol CatchContentViewControllDelegate { 5 optional func backScreen() 6} 7 8class CatchContentViewController: UIView { 9 10 var delegate:AnyObject? = nil 11 12 13 @IBAction func pressedBackButton(sender: AnyObject) { 14 // ここでエラーが出るのでXcodeの指示通り 15 // self.delegate?.backScreen!() 16 // と言う風に修正。 17 self.delegate?.backScreen() 18 } 19} 20
  • エラーメッセージ

Value of optional type '(() -> ())?' not unwrapped; did you mean to use '!' or '?'?

何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

backScreen()->()(何も引数に取らず何も返さない関数の型)ではなく、
Optional<()->()>(~のOptional型)です。
Optionalな型は、元の型ではなく、あくまでOptinalな型です。
したがってOptionalな型にアクセスしようとしたら「中身」を取り出さなければいけません
その取り出す方法の指定が?または!です。

?は中身があったらやって下さいの意です。
ざっくり言えば中身がなければ何もしません。

!は中身があると決め打ちしてやって下さいの意です。
ざっくり言えば中身がなければ実行時例外です。

「swift optional」でググッて3番目ぐらいに出てきたページにわかりやすく書いてあります。

Swift殆ど知らないので自分の知るOptional相当の概念と
検索で調べて書きました。

投稿2016/02/20 12:25

ozwk

総合スコア13521

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問