簡體   English   中英

Swift:使用與號(&)引用對象的屬性會導致編譯器錯誤

[英]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的內置屬性firstlast 因此,該代碼也應起作用:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM