簡體   English   中英

Swift - 如何重載 += 以便 Int 在像 nextPage(page: pageIndex += 1) 這樣的函數調用中將運算符作為參數傳遞?

[英]Swift - How to overload += for Int to pass the operator as a parameter in a function call like nextPage(page: pageIndex += 1)?

我想知道如何執行以下操作:-

    // This is not correct
    func += (inout lhs: Int, rhs: Int) -> Int {
        return lhs + rhs
    }


Objective Usage:- scrollTo(pageIndex: pageIndex += 1)

您的代碼很接近,但它需要做兩件事:

  1. 將右手邊添加到左手邊
  2. 返回新值。

您的代碼僅返回新值,不會更新左側值。 理論上,你可以使用這個:

func += (lhs: inout Int, rhs: Int) -> Int {
    lhs = lhs + rhs
    return lhs
}

但還有另一個問題; 標准 += 運算符具有void返回類型,並且您定義了一個具有Int返回類型的新運算符。

如果您嘗試在可以接受 void 返回類型的上下文中使用+=運算符(這是此運算符的正常使用),編譯器將給出歧義錯誤,因為它無法確定應該使用哪個函數:

someIndex += 1   // This will give an ambiguity compile time error

您可以通過使用泛型定義運算符來解決此問題,其中參數符合AdditiveArithmetic (感謝 @NewDev 提供此提示):

func +=<T: AdditiveArithmetic> (lhs: inout T, rhs: T) -> T {
    lhs = lhs + rhs
    return lhs
}

然而,我必須說,當您可以簡單地使用兩行代碼時,這看起來確實很復雜; 一個增加pageIndex然后調用函數。

我不確定我是否理解你,但是,如果我理解了,我會是這樣的

func nextPage(n1: Int) -> Int {

var 編號 = n1 + 1 返回編號 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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