Hoe krijg ik de tekenreeks voor een bepaald teken in swift? De onderstaande code is hoe ik het deed in Objective C, maar ik kan niet dezelfde taak uitvoeren in Swift. Tips of suggesties om dit te bereiken? rangeOfString
lijkt helemaal niet te werken in swift (hoewel Swift weer tegen me opkomt).
NSRange range = [time rangeOfString:@" "];
NSString *startDate =
[time substringToIndex:range.location];
Zoals je aan de bovenstaande code kunt zien, kan ik de tekenreeks vóór het spatieteken krijgen in Doelstelling C.
Bewerken: als ik zoiets probeer
var string = "hello Swift"
var range : NSRange = string.rangeOfString("Swift")
Ik krijg de volgende foutmelding.
Kan het type ‘NSString’ van de expressie niet converteren naar het type ‘(String,
opties: NSStringCompareOptions, bereik: bereik?, landinstelling:
NSLokale?)’
Ik weet niet zeker wat ik precies verkeerd heb gedaan of hoe ik het correct kan oplossen.
Antwoord 1, autoriteit 100%
Gebruik componentenSeparatedByString() zoals hieronder getoond:
var delimiter = " "
var newstr = "token0 token1 token2 token3"
var token = newstr.components(separatedBy: delimiter)
print (token[0])
Of om uw specifieke geval te gebruiken:
var delimiter = " token1"
var newstr = "token0 token1 token2 token3"
var token = newstr.components(separatedBy: delimiter)
print (token[0])
Antwoord 2, autoriteit 22%
U kunt hetzelfde doen met rangeOfString()
geleverd door de klasse String
let string = "Hello Swift"
if let range = string.rangeOfString("Swift") {
let firstPart = string[string.startIndex..<range.startIndex]
print(firstPart) // print Hello
}
U kunt het ookbereiken met uw methode substringToIndex()
let string = "Hello Swift"
if let range = string.rangeOfString("Swift") {
firstPart = string.substringToIndex(range.startIndex)
print(firstPart) // print Hello
}
Swift 3 UPDATE:
let string = "Hello Swift"
if let range = string.range(of: "Swift") {
let firstPart = string[string.startIndex..<range.lowerBound]
print(firstPart) // print Hello
}
Ik hoop dat dit je kan helpen;)
Antwoord 3, autoriteit 13%
Vervolg op het antwoord van Syed Tariq: als u alleen de tekenreeks vóór het scheidingsteken wilt (anders krijgt u een array [String]):
var token = newstr.components(separatedBy: delimiter).first
Antwoord 4, autoriteit 8%
Je zou de methode prefix(upTo:)kunnen gebruiken in Swift 4 of hoger
var string = "hello Swift"
if let index = string.firstIndex(of: " ") {
let firstPart = string.prefix(upTo: index)
print(firstPart) // print hello
}
Antwoord 5, autoriteit 7%
Swift 5 extensies
extension String {
func stringBefore(_ delimiter: Character) -> String {
if let index = firstIndex(of: delimiter) {
return String(prefix(upTo: index))
} else {
return ""
}
}
func stringAfter(_ delimiter: Character) -> String {
if let index = firstIndex(of: delimiter) {
return String(suffix(from: index).dropFirst())
} else {
return ""
}
}
}
let str = "n1:lolz"
str.stringBefore(":") // n1
str.stringAfter(":") // lolz
str.stringAfter("z") // empty string
str.stringBefore("n") // empty string
str.stringBefore("g") // empty string
Dit, naar mijn mening, is slechts een uitgangspunt en moet sterk worden afgestemd.