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

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

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

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1451閲覧

String??型とは何か

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/01/13 08:34

編集2017/01/13 08:59

お世話になります。

iPhoneアプリ開発にて、MapKit を試していたのですが、String?? 型という奇妙な型に遭遇しました。
このような型に出会うのは始めての経験で戸惑っております。

もし、詳しく分かる方がいらっしゃいましたら、ご解説をお願いできませんでしょうか?
何卒宜しくお願い致します。

※ Xcode は 最新版(ver 8.2.1)です。

イメージ説明
イメージ説明

// サンプルコード import UIKit import MapKit class ViewController: UIViewController, MKMapViewDelegate { var mapView: MKMapView? override func viewDidLoad() { super.viewDidLoad() self.mapView = MKMapView() self.mapView?.delegate = self } func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) { // String? 型になります let title = view.annotation?.title ?? "" } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

2種類の??についての質問です。
同じものだと思っていると混乱するので注意しましょう。

型の??

二重にラップされているだけです。

swift

1let hoge: String?? = "hoge" 2print(type(of: hoge)) 3if let hoge = hoge { 4 print(type(of: hoge)) 5 if let hoge = hoge { 6 print(type(of: hoge)) 7 } 8} 9//=> Optional<Optional<String>> 10//=> Optional<String> 11//=> String

三重以上になっても大丈夫で、String?????なんてのもアリです。

演算子の??

[Swift] Optional 型についてのまとめ Ver2 / Qiita
?? 演算子

投稿2017/01/13 09:01

編集2017/01/13 09:58
fuzzball

総合スコア16731

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

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

退会済みユーザー

退会済みユーザー

2017/01/14 07:58 編集

ありがとうございました。 しかし、何故 annotation のタイトルわざわざが二重ラップされた実装になっているのか気になりますね。 まあ、Obejective-Cで実装された MapKit の APIの実装上の問題なんだろうとは思いますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問