Swiftプログラミング言語ガイドには、次の例があります。
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { println("\(name) is being deinitialized") }
}
class Apartment {
let number: Int
init(number: Int) { self.number = number }
var tenant: Person?
deinit { println("Apartment #\(number) is being deinitialized") }
}
var john: Person?
var number73: Apartment?
john = Person(name: "John Appleseed")
number73 = Apartment(number: 73)
//From Apple's “The Swift Programming Language” guide (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html)
次に、アパートメントを人物に割り当てるときに、感嘆符を使用して「インスタンスのラップを解除」します。
john!.apartment = number73
「インスタンスをアンラップする」とはどういう意味ですか?なぜ必要なのですか?以下を実行するだけの場合とどう違うのですか?
john.apartment = number73
私はSwift言語に非常に慣れていません。基本を理解しようとしています。
更新:
私が行方不明だったパズルの大きな部分(答えに直接述べられていません-少なくともこれを書いている時点ではありません)は、次のことをするときです:
var john: Person?
私が最初に思ったように、それjohn
は「タイプでPerson
あり、それはnilかもしれない」という意味ではありません。私は単にそれを誤解してPerson
おりPerson?
、完全に別のタイプです。それを理解すると、他のすべて?
、!
狂気、および以下の素晴らしい答えは、はるかに理解しやすくなりました。