2017-07-25 1 views
0

Essayer d'utiliser la méthode comme ceci:Comment spécifier la plage « dans: » argument de la plage de la méthode Swift 3 (de: options: en)

let myrange = 0...3 
let rang = data.range(of: data, options: NSData.SearchOptions(), in: myrange) 

l'erreur suivante.

cannot convert value of type 'CountableClosedRange<Int>' to expected argument type 'Range<Data.Index>?' 

Documentation pour la méthode ici: https://developer.apple.com/documentation/foundation/nsdata/1410391-range

spécifie de type pour argument: comme NSRange. Cependant la création d'un NSRange comme ceci:

let myNSRange = NSRange(location: 3, length: 2) 

résultats dans cette erreur:

cannot convert value of type 'NSRange' (aka '_NSRange') to expected argument type 'Range<Data.Index>?' 

Comment puis-je créer un 'Range<Data.Index>' qui fonctionnera ici?

Merci.

Répondre

1

Pour créer un Range<Data.Index> littéralement vous devez utiliser l'opérateur CountableRange et annoter le type:

let data = Data(0..<100) 
let subData = Data(0..<2) 

let myrange : Range<Data.Index> = 0..<4 
let rang = data.range(of: subData, in: myrange) // Range(0..<2) 

Fondation NSRange et Swift Range sont deux choses complètement différentes. En passant: Le paramètre options a une valeur par défaut de sans options et peut être omis.

+0

Merci pour votre réponse. Cela l'a résolu complètement et a été le point de départ pour apprendre beaucoup sur les gammes sous Swift 3. –