[英]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.