2016-06-28 18 views
17

Zaten Swift 2'de vardı Swift 3'te bir dizi yapmaya çalışıyorum ama bana bu hatayı veren tutar: Burada String may not be indexed with 'Int', it has variable size elementsSwift bir aralık oluşturmak Can not 3

benim kodudur:

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

expiredRange Swift 2'de bir Range<Index>?

, ben vardı:

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

cevap

40

Swift 3'te, "Koleksiyonlar kendi dizinlerini hareket ettirir", bkz. A New Model for Collections and Indices Swift evolution.

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

yöntemi şimdi özelliklere lower/upperBound sahip aralığı (yeni endeksleri hesaplamak için dize denir

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" 
} 

: Burada

Yaylı aralıkları ve indeksler için bir örnektir start/endIndex) yerine.