2016-08-02 13 views
1

Ich bin sehr schnell zu schnell Sprache. Ich führe eine Geschäftslogik aus, die NSRange von gegebenem String nehmen muss.Wie nehme ich NSRange in swift?

Hier ist meine Anforderung, Gegebene Menge = "144.44" Benötigen Sie NSRange von nur Cent-Teil, d.h. nach "."

Gibt es eine API dafür?

+0

http://shipster.com/nsrange/ –

+0

Nicht sicher, was Sie fragen. Es gibt die Funktion 'NSMakeRange', die 2 ganze Zahlen als Eingabe nimmt und einen Bereich zurückgibt. Oder fragen Sie, wie man nach einem String sucht und einen 'NSRange' zurückgibt, der einen Teilstring darstellt (wie" alles nach dem Komma "?) –

+0

Oder brauchst du wirklich einen' NSRange' oder einen '' aus dem Teilstring ? Es hängt davon ab, was Sie damit tun werden. – Abizern

Antwort

5

Sie können eine regex-basierte Suche tun, um die Reichweite zu finden:

let str : NSString = "123.45" 
let rng : NSRange = str.range("(?<=[.])\\d*$", options: .RegularExpressionSearch) 

Regulärer Ausdruck "(?<=[.])\\d*$" bedeutet „null oder mehr Ziffern nach einem Punktzeichen '.' über Blick hinter, den ganzen Weg bis zum Ende der die Zeichenfolge $. "

+0

OP verwendet 'String' Typ, also braucht er Typ-Cast, aber Lösung ist genial. –

1

Wenn Sie ein substring von einer bestimmten string mögen, können Sie componentsSeparatedByString

Beispiel verwenden:

var number: String = "144.44"; 
var numberresult= number.componentsSeparatedByString(".") 

dann können Sie erhalten Komponenten wie:

var num1: String = numberresult [0] 
var num2: String = numberresult [1] 

hoffen, dass es helfen !!

0

Verwenden rangeOfString und substringFromIndex:

let string = "123.45" 
if let index = string.rangeOfString(".") { 
    let cents = string.substringFromIndex(index.endIndex) 
    print("\(cents)") 
} 
0

Eine andere Version, die Swift Ranges verwendet, anstatt NSRange

die Funktion definieren, die eine optionale Strecke zurückgibt:

func centsRangeFromString(str: String) -> Range<String.Index>? { 
    let characters = str.characters 
    guard let dotIndex = characters.indexOf(".") else { return nil } 

    return Range(dotIndex.successor() ..< characters.endIndex) 
} 

Welche können Sie testen, mit:

let r = centsRangeFromString(str) 
// I don't recommend force unwrapping here, but this is just an example. 
let cents = str.substringWithRange(r!) 

Playground example

Verwandte Themen