非常に基本的なことだと心苦しいのですが、
https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html
のnilの部分に
Swift
1var serverResponseCode: Int? = 404
このコードなのですが、変数serverResponseCodeはオプショナルInt型と型注釈されているのですが、この変数に整数リテラルの404を代入するとエラーが出るのではないか、と思ってしまうのですが、実際はエラーが出ません。
なぜエラーが出ないのでしょうか?
質問に質問で返すようで恐縮ですが、出るとしたらどのようなエラーが出るとお考えですか?
コメントを頂きましてありがとうございます。現在の私の認識ですと、
Int?は列挙型、serverResponseCodeは列挙型であるInt?の変数、
404は構造体であるInt型の値。
Int?型の変数にInt型の値を代入しようとしているので、「型が違うので代入できません」
的なエラーが出るはずだ、という認識です。
そもそも `Int?` は 列挙型 (enum) ではないし、 `Int` も構造体 (struct) ではないと思いますが、何をもとにそうおっしゃっているのでしょうか?
Int?はOptional<Int>型で列挙型。
数値型、Bool型、String型など標準ライブラリで提供されている多くの方は構造体。
上記はSwift実践入門という書籍にある情報でして、これを基に考えています。
そちらの書籍は読んだことがないし手元にもないのですが、なんとなく言いたいことはわかったような、わからないような……
> `Int?` は 列挙型 (enum) ではないし、 `Int` も構造体 (struct) ではない
こちらは私の凝り固まった発想から出た嘘でしたので、取り消します。
ちなみにOptionalに対する公式のDocumentはこちらです。Objective-C / Swiftを書いているとAppleの不親切さに結構やられることがありますが、結局Documentに書いていることが正で、書いていないことは不確定要素なので、多少、「飲み込むしかない」というところもあります(まあ、どんな言語でもそうですけど……)
https://developer.apple.com/documentation/swift/optional
うーん、うまく言語化できないんのですが、やはり解答欄に差し上げたとおり「Int or nilが入る箱にIntが入っている」としか、私の能力ではお伝えしきれないです。非力で申し訳ないですが。
いえいえとんでもございません。
お示し頂いたドキュメントを読んで考えてみようと思います。
ありがとうございました。
回答2件
あなたの回答
tips
プレビュー