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?
は完全に別のタイプだと単純に誤解していました。それを理解すると、他のすべて?
、!
狂気、および以下の素晴らしい答えがより理にかなっています.