Swift:使用与符号 (&) 引用对象的 属性 导致编译器错误
Swift: taking reference of object's property with ampersand (&) causing compiler error
这是一个相当简单的问题。考虑一个数组:
var array = [1, 2, 3, 4, 5, 6, 7]
我希望使用标准 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)
按预期工作。
这是一个相当简单的问题。考虑一个数组:
var array = [1, 2, 3, 4, 5, 6, 7]
我希望使用标准 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)
按预期工作。