参考書を読んでいたら、UIImageViewクラスから生成されたインスタンスがimageプロパティを使用していました。そしてそのimageプロパティはオプショナルのUIImage型だと説明がありました。実際imageについて公式ドキュメントでも、
var image: UIImage? { get set }
と宣言がしてあり、UIImage型で宣言してありました。
オプショナルの意味はわかってるつもりでいるのですが、このUIImage型の意味がわかりません。型というとIntやDoubleなどという認識だったので混乱してます。UIImage型とはUIImageクラスで宣言されたプロパティということですか?またどういう意味があるんでしょうか?
初心者ですが、回答よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
こんにちは。
Optionalについてはおわかりになられているとのことですが、はじめに念のため、Optionalとはなにかについて確認をさせていただきます。
Appleのドキュメントには、Swiftが’Type Safety’な言語であることが書かれています。
これが具体的にどのようなことを意味するのかといいますと、String型にInt型を代入することや、String型などの通常の型にnilを代入することはできないということです。
Swiftは、nilを許容しませんので、たとえば、つぎのようなコードは静的な型チェックでエラーとなってしまいます。
lang
1var myValue: Int = nil //エラー
しかし、値がない変数を使用することは頻繁にあります。
そこで登場するのがOptionalです。変数の型をOptionalにすることで、nilを代入することが可能となります。これを指定するには、変数の宣言時に型のうしろに「?」をつけます。
lang
1var myValue: Int? = nil //問題なし
とすることでnilを代入することが可能となります。
つまり、Optional型は、値がはいっていない、または、はいらないかもしれない変数を宣言する場合に使用されます。Optionalの言葉が示すとおり、随意的(オプション)に変数を指定するという考え方です。
前置きが長くなりましたが、ここからようやく本題です。
monokuroさんの質問のなかで問題となっている UIImageはクラスであり、Swiftでは型にふくまれます。
ということで、
lang
1var image: UIImage? { get set }
とすることには、なんら問題はありません。
ここで、Swiftの公式ドキュメント(リンク)をみてみましょう。型について説明している箇所の冒頭にはつぎのように書いてあります。
In Swift, there are two kinds of types: named types and compound types. A named type is a type that can be given a particular name when it is defined. Named types include classes, structures, enumerations, and protocols. For example, instances of a user-defined class named MyClass have the type MyClass. In addition to user-defined named types, the Swift standard library defines many commonly used named types, including those that represent arrays, dictionaries, and optional values.
(拙訳)Swiftには2種類の型、名前付き型と複合型とがあります。名前付き型は、定義の際に特定の名前があたえられることでつくられる型です。名前付き型は、クラス、構造体、列挙型、プロトコルをふくみます。たとえば、MyClassという名前がつけられたユーザー定義のクラスのインスタンスは、MyClass型をもちます。ユーザー定義の名前付き型にくわえて、Swift標準ライブラリは、配列、辞書、Optionalの値をあらわすものをふくめ、一般的に使用される多くの名前付き型を定義します。
monokuroさんが、質問のなかで取りあげられている Intや Doubleなども名前付き型にふくまれます。
【おまけ】オブジェクトとは、ひとつのテーマをもったデータ(プロパティ)と処理(メソッド)の集まりです。物理的なものでも抽象的なものでも、具体的に識別できるものであればオブジェクトとしてあつかうことができます。
クラスはオブジェクトの設計書で、それが実体となったものをインスタンスといいます。インスタンスとオブジェクトは、おなじ意味で使われることが多いのですが、インスタンスといった場合は必ずクラスを意識しています。
noppefoxwolfさんとのコメントでのやりとりのなかに、「オブジェクト」についての記述がありましたので、かんたんに説明させていただきました。
以上、ご参考いただければ幸いです。
投稿2015/02/12 03:34
退会済みユーザー
総合スコア0
0
ベストアンサー
UIImageは画像を管理するクラスとなっています。
lang
1UIImage(named:"filename")
のように生成することで、画像をオブジェクトとして扱う事ができます。
UIImage自体はあくまで画像のオブジェクトなので表示する機能を持っていません。
UIImageViewはプロパティのUIImageを表示するビューなので、UIImageのプロパティを持っているということです。
またオプショナルの意味はご存知とのことですが、UIImageのプロパティがnilである場合はUIImageViewは何も画像を描画されずに表示されます。
投稿2015/02/10 15:37
総合スコア231
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/11 04:21
2015/02/11 06:28
2015/02/11 07:40
2015/02/11 08:37
2015/02/11 14:13
2015/02/12 07:46
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/12 07:52
退会済みユーザー
2015/02/13 01:53