【问题标题】:Swift, handle Arrays and Datatypes (Split String from String) [duplicate]Swift,处理数组和数据类型(从字符串拆分字符串)[重复]
【发布时间】:2017-02-14 20:21:42
【问题描述】:

几天前我刚开始使用 Swift,我正在为所有不同的数据类型苦苦挣扎......

假设我们这样做:

var myarray = ["justin", "steve", "peter"]
var newString = myarray[2]

那么为什么我现在不能只打印“peter”中的“p”?

print(newString[0])

---> 给我一个错误:

"'subscript' is unavailable: cannot subscript String with an Int"

在本主题中: [Get nth character of a string in Swift programming language

它说: “请注意,您永远不能使用从一个字符串创建的索引(或范围)到另一个字符串”

但我无法想象,没有办法处理它......

因为当我这样做时:

var myarray = ["justin", "steve", "p.e.t.e.r"]
var newString = myarray[2]
let a : [String] = newString.componentsSeparatedByString(".")
print(a[2])
  • 然后它就可以工作了。它打印(在这种情况下)“t”。

那么我该如何拆分它“SeparatedByString”'Nothing'?

我相信解决这个问题也会帮助我解决许多其他问题。 我希望我以应该完成的方式发布问题。

感谢您提供任何解决方案或提示 :)

【问题讨论】:

    标签: arrays swift string


    【解决方案1】:

    实例方法componentsSeparatedByString 应用于String 实例会产生一个String 实例数组,即[String]。数组的元素可以以经典的 Java/C++ 方式 (let thirdElement = array[2]) 进行索引。

    如果您想将 String 实例 ("peter") 拆分为单个字符 String 实例的数组,您可以使用 String 实例的 CharacterView 属性,然后将CharacterView 中的每个Character 映射回单个字符String 实例

    let str = "peter"
    let strArray = str.characters.map(String.init(_:)) // ["p", "e", "t", "e", "r"]
    let thirdElement = strArray[2] // t
    

    尽管如此 (String -> CharacterView -> [String] -> String),这是一种相当迂回的方式,而且您很可能最好只是在 @Hamish 挖掘的欺骗线程中查看出色的答案(涵盖直接 String 索引):

    正如下面 Hamish 所指出的,上述可能适用的极端情况是,如果您经常需要在特定索引处访问 String 中的字符,并且喜欢使用 O(1)对数组可用的随机访问(如果您使用不可变的String:s 则更适用,这样对应的String 数组只需为每个不可变的String 实例生成一次)。

    【讨论】:

    • 如果您需要经常访问给定索引处的字符,这是一个很好的方法,而不必为每次访问进行线性遍历:)
    • 谢谢。 :) 它给了我 2 个错误(“预期的 ',' 分隔符”“表达式列表中的预期表达式”),但这可能是我的 Swift 版本(2.1.1)的问题。我还将检查链接的线程。谢谢,帮我不生气了! :D
    • @Hamish 这是真的!与.map { String($0) } 相比,我真的不知道我真的.map(String.init(_:)) 变体的看法,但是嘿,为什么不呢:D
    • @scopaest 将上面 sn-p 中的第二行替换为 let strArray = str.characters.map { String($0) },它可能适用于 Swift 2.1(经过测试并适用于 Swift 2.2)。
    • @dfri 是的,当它到达你必须消除 init(_:) 的歧义时,我通常会回到使用闭包表达式,但我想这是一个偏好问题: )
    猜你喜欢
    • 2016-03-22
    • 1970-01-01
    • 2013-08-19
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2016-08-07
    相关资源
    最近更新 更多