我知道它的noob问题,我真的在搜索之前搜索.但对于我想知道的内容并没有确切的答案.我们如何在不使用Objective C的情况下将字符串拆分为数组?例如:
var str = "Today is so hot"
var arr = str.componentsSeparatedByString(" ") // *
Run Code Online (Sandbox Code Playgroud)
想法:对我来说可能非常好,扩展了字符串类.但我不知道我是怎么做到的.
编辑:忘记导入基础.如果我导入基础它将工作.但是有没有办法扩展String类?谢谢
Mar*_*n R 32
如果要按给定字符拆分字符串,则可以使用内置split()方法,而无需使用Foundation:
let str = "Today is so hot"
let arr = split(str, { $0 == " "}, maxSplit: Int.max, allowEmptySlices: false)
println(arr) // [Today, is, so, hot]
Run Code Online (Sandbox Code Playgroud)
更新Swift 1.2:使用Swift 1.2(Xcode 6.3)更改参数的顺序,比较split现在抱怨缺少"isSeparator":
let str = "Today is so hot"
let arr = split(str, maxSplit: Int.max, allowEmptySlices: false, isSeparator: { $0 == " "} )
println(arr) // [Today, is, so, hot]
Run Code Online (Sandbox Code Playgroud)
Swift 2更新:请参阅Stuart的回答.
Swift 3更新:
let str = "Today is so hot"
let arr = str.characters.split(separator: " ").map(String.init)
print(arr)
Run Code Online (Sandbox Code Playgroud)
Stu*_*art 18
在Swift 2中,它的语法更加简洁.顶级split函数现在是一个方法CollectionType(String.CharacterView符合).
该方法有两个版本,第一个采用闭包作为谓词来指示给定元素是否应该被视为分隔符,而另一个只需要一个元素来指定作为分隔符 - 这很可能是你想要的99字符串拆分的百分比.它们都有一些默认参数(详见文档),这有助于保持方法调用的清晰.
值得注意的是split(_:)返回a SubSequence(基本上是a Slice),因此在大多数情况下需要转换回Strings 数组,这通常更有用.
let str = "Today is so hot"
let words = str.characters.split(" ").map { String($0) } // or `.map(String.init)`
Run Code Online (Sandbox Code Playgroud)
map(String.init))map是一个接受函数作为参数的方法.大多数情况下,您可能只使用尾随闭包(一个未命名的函数)作为参数map,例如:
func createString(from character: Character) -> String {
// ...
}
let strings = characters.map { createString(from: $0) }
Run Code Online (Sandbox Code Playgroud)
但以下内容更简洁,同样有效:
let strings = characters.map(createString(from:))
// or even:
let strings = characters.map(createString) // argument names inferred from context.
Run Code Online (Sandbox Code Playgroud)
在上述例子中,createString(from:)和createString都是函数表达式.map期望函数作为参数,函数表达式可以作为参数传递.你可以在任何接受函数作为参数的地方传递一个函数表达式,这就是为什么你可以sort像这样使用符合以下类型的类型Comparable:
let sortedStrings = strings.sorted(by: <)
// `<` is just a function expression for a function that is essentially declared something like this:
func <(lhs: String, rhs: String) -> Bool {
// ...
}
Run Code Online (Sandbox Code Playgroud)
String.init是初始化表达式.它可以以与函数表达式相同的方式使用 - 它本身描述了一个函数,该函数将单个Character作为参数,并返回一个类型的值String(虽然String.init是重载的,可以传递许多不同类型的参数).
为了帮助澄清发生了什么,请考虑以下代码,其中每次调用map完全相同,但使用越来越简洁的语法:
// - Closure expression syntax used.
// - Explicit argument names & types.
// - Long-hand string initialization.
let strings = characters.map({ (character: CharacterView) -> String in
return String.init(character)
})
// - Trailing closure syntax used (parentheses omitted).
// - Closure argument and return types inferred from context (type names omitted).
// - Short-hand (standard, really) string initialization.
let strings = characters.map { character in
return String(character)
}
// - Implicit return since using single expression in the closure (`return` keyword omitted).
let strings = characters.map { character in String(character) }
// - Shorthand argument names (`in` keyword and argument names omitted).
let strings = characters.map { String($0) }
// - Initializer expression syntax used (curly braces omitted, argument implicitly passed to the initializer).
let strings = characters.map(String.init(_:))
// - Initializer expression argument names inferred from context.
let strings = characters.map(String.init)
Run Code Online (Sandbox Code Playgroud)
在Swift 3.0中使用components(separatedBy:)字符串比componentsSeparatedByString.
共享代码示例
let tempString = "1.Wash your hands\n2.Check you phone\n3.Click home button".components(separatedBy: "\n")
print(tempString)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16909 次 |
| 最近记录: |