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)
Run Code Online (Sandbox Code Playgroud)
然后,当将公寓分配给该人时,他们使用感叹号来"解开实例":
john!.apartment = number73
Run Code Online (Sandbox Code Playgroud)
"打开实例"是什么意思?为什么有必要?它与仅执行以下操作有何不同:
john.apartment …Run Code Online (Sandbox Code Playgroud) SQLite.swift (Branch Swift-1-2)我在 XCode 6.3 beta 的应用程序中使用。我能够创建数据库/表并将条目插入表中。
到目前为止,一切都很好。
现在,当我有一个简单的场景如下:
class Foo {
var id: Int?
var name: String?
/* constructor to create an instance ... */
}
// This is how the table column is defined
var id = Expression<Int64>("id")
// Function to update data in the table
func updateFoo(foo: Foo) -> Int? {
// 'foos' is the table name
let candidateFoo = foos.filter(super.id == foo.id!) //<----ERROR!!!
let (rowsUpdated, statement) = candidateFoo.update(name <- foo.name!)
if let rowsUpdated = rowsUpdated …Run Code Online (Sandbox Code Playgroud)