来自Apple的书"结构和类之间最重要的区别之一是结构在代码中传递时总是被复制,但类是通过引用传递的."
任何人都可以让我理解这意味着什么,对我来说,类和结构似乎是一样的.
当谈到在Swift中改变值类型时,有些事情我并不完全理解.
正如"The Swift Programming Language"iBook所述: 默认情况下,不能在其实例方法中修改值类型的属性.
因此,为了实现这一点,我们可以mutating在结构和枚举中使用关键字声明方法.
对我来说并不完全清楚的是:您可以从结构外部更改var,但不能从自己的方法中更改它.这对我来说似乎是违反直觉的,因为在面向对象语言中,你通常会尝试封装变量,因此它们只能从内部进行更改.对于结构,这似乎是另一种方式.详细说明,这是一段代码片段:
struct Point {
var x = 0, y = 0
mutating func moveToX(x: Int, andY y:Int) { //Needs to be a mutating method in order to work
self.x = x
self.y = y
}
}
var p = Point(x: 1, y: 2)
p.x = 3 //Works from outside the struct!
p.moveToX(5, andY: 5)
Run Code Online (Sandbox Code Playgroud)
有没有人知道结构不能从他们自己的上下文中改变他们的内容的原因,而内容可以很容易地在其他地方改变?
有人可以用简单的术语解释什么是Key-Value-Coding和Key-Value-Observing?请不要提供Apple Developer参考文档的链接.我经历过他们.我希望用非常简单的术语来解释.
虽然我有一些想法可以使用,但确切的用法仍然不清楚.有人能解释一下......?谢谢.
我是Swift后端的新手,并且认为我会快速使用Vapor在一个侧面项目上运行起来......我跑了vapor new WebServer --template=auth-template,现在我正在试图找出类似return \.email意味着什么.有关更多上下文,我正在查看WebServer> Sources> App> Models> Users.swift:
import Authentication
import FluentSQLite
import Vapor
/// Allows users to be verified by basic / password auth middleware.
extension User: PasswordAuthenticatable {
/// See `PasswordAuthenticatable`.
static var usernameKey: WritableKeyPath<User, String> {
return \.email
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
这是User类的定义:
/// A registered user, capable of owning todo items.
final class User: SQLiteModel {
// {omit extra code} ...
var email: String
// {omit extra code} ...
/// Creates …Run Code Online (Sandbox Code Playgroud) 如图此页
[self setValue:[NSNumber numberWithInt:intValue] forKey:@"myObject.value"];
Run Code Online (Sandbox Code Playgroud)
答案是"当然,这是一条关键路径,而不是一把钥匙",这是什么意思?