[英]Swift: taking reference of object's property with ampersand (&) causing compiler error
这是一个相当简单的问题。 考虑一个数组:
var array = [1, 2, 3, 4, 5, 6, 7]
我希望使用标准swap
功能swap
数组的第一个和最后一个元素:
swap(&array[0], &array[array.count - 1])
但是,存在另一种获取数组的第一个和最后一个元素的方法,即使用Array
的内置属性first
和last
。 因此,该代码也应起作用:
swap(&array.first!, &array.last!)
但是,这一次编译器抱怨Type of expression is ambiguous without more context
。 我不知道如何修改表达式,以便编译器可以正确解析它。
first
是一个只读属性,因此您不能通过array.first
修改数组。
swap(&array[0], &array[array.count - 1])
之所以起作用,是因为可变集合类型的subscript()
具有setter和getter。
我不建议这样做,但是如果您定义自己的读写属性
extension Array {
var myFirst: T {
get { return self[0] }
set { self[0] = newValue }
}
var myLast: T {
get { return self[count - 1] }
set { self[count - 1] = newValue }
}
}
(假设该数组不为空)然后
swap(&array.myFirst, &array.myLast)
如预期般运作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.