Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
418 views
in Technique[技术] by (71.8m points)

swift3 - Can't create a range in Swift 3

I am trying to make a range in Swift 3 that I already had in Swift 2 but it keeps giving me this error: String may not be indexed with 'Int', it has variable size elements

Here is my code:

let range = expireRange!.startIndex.advancedBy(n: 7) ..< expireRange!.startIndex.advancedBy(n: 16)

expiredRange is a Range<Index>?

In Swift 2, I had:

let range = expireRange!.startIndex.advancedBy(7)...expireRange!.startIndex.advancedBy(16)
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

In Swift 3, "Collections move their index", see A New Model for Collections and Indices on Swift evolution.

Here is an example for String ranges and indices:

let string = "ABCDEFG"
if let range = string.range(of: "CDEF") {
    let lo = string.index(range.lowerBound, offsetBy: 1)
    let hi = string.index(range.lowerBound, offsetBy: 3)
    let subRange = lo ..< hi
    print(string[subRange]) // "DE"
}

The

public func index(_ i: Index, offsetBy n: IndexDistance) -> Index

method is called on the string to calculate the new indices from the range (which has properties lower/upperBound now instead of start/endIndex).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...