Есть что-то, что я не совсем понимаю, когда речь идет о мутировании типов значений в Swift.
Как "Быстрый язык программирования" 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)
Кто-нибудь знает причину, по которой структуры не могут изменять свой контент изнутри своего контекста, а содержимое можно легко изменить в другом месте?