![](/img/trans.png)
[英]Cannot invoke 'append' with an argument list of type '(Range<String.Index>)'
[英]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)
我從xcode 9.2遷移到xcode 10.1,然后開始遇到此錯誤並通過這種方式解決了
let range = start...end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.