簡體   English   中英

Swift數組下標索引編制中的錯誤?

[英]Bug in Swift array subscript indexing?

我從項目中隔離了一些Swift代碼,可以將其粘貼到Playground中。 在普通的Xcode編輯和Playground中,都會產生錯誤“找不到'+'的重載,該重載接受提供的參數” 錯誤是指最后(非平凡)的行。

import UIKit

let points = 40
let max = points-1

let L = 10.0
let Deltat = 0.01
let Deltax = L/Double(points)

var a = [Double](count: points, repeatedValue: 0.0)
var b = [Double](count: points, repeatedValue: 0.0)
var c = [Double](count: points, repeatedValue: 0.0)

for i in 1..<max-1
{   //let iPlus1 = i+1
    //let temp = 0.5*Deltat/Deltax
    c[i] = 0.5*(a[i+1] + a[i-1]) + 0.5*Deltat/Deltax * (b[i+1] - b[i-1])
}

如果我取消注釋“ let iPlus1 ...”行並進行以下編輯,則Swift接受該代碼。

{   let iPlus1 = i+1
    //let temp = 0.5*Deltat/Deltax
    c[i] = 0.5*(a[iPlus1] + a[i-1]) + 0.5*Deltat/Deltax * (b[i+1] - b[i-1])
}

如果我取消注釋“ let temp ...”行並進行以下編輯,則Swift再次接受該代碼。

{   //let iPlus1=i+1
    let temp = 0.5*Deltat/Deltax
    c[i] = 0.5*(a[i+1] + a[i-1]) + temp * (b[i+1] - b[i-1])
}

這些編輯對我來說都沒有意義,因為它們似乎都是微不足道的替代品。 我知道,Swift永遠不會對我進行隱式轉換。 原始代碼中似乎沒有嘗試進行任何隱式類型轉換-所有Ints和Doubles均按預期聲明。 我開始相信這是Swift數組下標索引的錯誤。

這是一個已知的迅速錯誤:長語句生成奇怪的編譯錯誤。 只需將您的行分為兩行,例如:

c[i] = 0.5*(a[i+1] + a[i-1])
c[i] += 0.5*Deltat/Deltax * (b[i+1] - b[i-1])

我發現同一行中有超過4或5個算術運算會發生這種情況,但這不是規則,只是一些表達式類型中存在一個數字-在其他情況下可能有所不同。

例如看此問答: Xcode Beta 6.1和Xcode 6 GM由於奇怪的原因卡住了索引,Xcode 6具有Swift超級慢速鍵入和自動補全功能 (這最后一個實際上會導致速度變慢 ,但是以相同的方式解決,所以根可能是相同)

暫無
暫無

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

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