簡體   English   中英

無法為“范圍”類型調用初始化程序 <String.Index> &#39;,其參數類型為&#39;(Range <String.Index> )&#39;

[英]Cannot invoke initializer for type 'Range<String.Index>' with an argument list of type '(Range<String.Index>)'

在更新到Xcode 10 beta(顯然是Swift 4.1.50附帶)之后,我看到以下錯誤,但不確定如何解決:

無法使用類型為((Range <String.Index>)'的參數列表來調用類型'Range <String.Index>'的初始化程序

Range<Index>(start..<self.endIndex) (第3行)的以下函數中:

func index(of aString: String, startingFrom position: Int? = 0) -> String.Index? {
    let start: String.Index = self.index(self.startIndex, offsetBy: position!)
    let range: Range<Index> = Range<Index>(start..<self.endIndex)
    return self.range(of: aString, options: .literal, range: range, locale: nil)?.lowerBound
}

任何想法如何修復初始化程序?

一些背景:

在Swift 3中,引入了其他范圍類型,總共增加了四種(例如,參見Ole Begemann:Swift 3中的Ranges ):

Range, ClosedRange, CountableRange, CountableClosedRange

通過Swift 4.2中SE-0143條件一致性的實現,“可計數”變量不再是單獨的類型,而是(受約束的)類型別名,例如

 public typealias CountableRange<Bound: Strideable> = Range<Bound>
      where Bound.Stride : SignedInteger

因此,已刪除了不同范圍類型之間的各種轉換,例如

init(_ other: Range<Range.Bound>)

struct Range初始化程序。 所有這些更改都是[stdlib] [WIP]使用條件一致性(#13342)提交消除(Closed)CountableRange的一部分

所以這就是為什么

let range: Range<Index> = Range<Index>(start..<self.endIndex)

不再編譯。

怎么修

如您所知,可以簡單地將其固定為

let range: Range<Index> = start..<self.endIndex

要不就

let range = start..<self.endIndex

沒有類型注釋。

另一種選擇是使用單面范圍 (在帶有SE-0172單面范圍的 Swift 4中引入):

extension String {
    func index(of aString: String, startingFrom position: Int = 0) -> String.Index? {
        let start = index(startIndex, offsetBy: position)
        return self[start...].range(of: aString, options: .literal)?.lowerBound
    }
}

之所以有效,是因為子字符串self[start...]與原始字符串self 共享其索引

事實證明,不必初始化范圍,而只需按以下步驟創建即可:

let range: Range<Index> = start...end

在這種情況下,代碼可以通過將Range<Index>(start..<self.endIndex)替換為:

let range: Range<Index> = start..<self.endIndex

我遇到了同樣的問題,您可以使用此代碼解決此問題-

讓范圍= startIndex .. <character.index(startIndex,offsetBy:1)

參考: https : //github.com/Ahmed-Ali/JSONExport/issues/121

我從xcode 9.2遷移到xcode 10.1,然后開始遇到此錯誤並通過這種方式解決了

let range = start...end

暫無
暫無

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

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