Arrays Swift、句柄数组和数据类型(从字符串中拆分字符串)

Arrays Swift、句柄数组和数据类型(从字符串中拆分字符串),arrays,swift,string,Arrays,Swift,String,几天前我刚开始使用Swift,我正在努力处理所有不同的数据类型 假设我们这样做: var myarray = ["justin", "steve", "peter"] var newString = myarray[2] 那为什么我现在不能只打印“彼得”的“p” --->给我一个错误: “'subscript'不可用:无法将字符串下标为Int” 在本主题中: [ 它说: “请注意,您永远不能使用从一个字符串到另一个字符串创建的索引(或范围)” 但我无法想象,没有办法处理它 因为当我这样做的时候

几天前我刚开始使用Swift,我正在努力处理所有不同的数据类型

假设我们这样做:

var myarray = ["justin", "steve", "peter"]
var newString = myarray[2]
那为什么我现在不能只打印“彼得”的“p”

--->给我一个错误:

“'subscript'不可用:无法将字符串下标为Int”

在本主题中: [

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

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

因为当我这样做的时候:

var myarray = ["justin", "steve", "p.e.t.e.r"]
var newString = myarray[2]
let a : [String] = newString.componentsSeparatedByString(".")
print(a[2])
  • 然后它就工作了。它打印(在本例中是)“t”
那么我如何通过字符串“无”分割它呢?

我相信解决这个问题也会在很多其他问题上帮助我。 我希望我以应该做的方式提出这个问题

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

应用于
字符串
实例的实例方法将生成一个
字符串
实例数组,即
[String]
。数组的元素可以用经典的Java/C++方式进行索引(
让thirdElement=array[2]

如果要拆分
字符串
实例(
“peter”
)在单个字符
String
实例的数组中,可以使用
String
实例的
CharacterView
属性,然后将
CharacterView
中的每个
字符
映射回单个字符
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所指出的,上述情况可能适用的一种情况是,如果您经常需要访问特定索引处的
字符串中的字符,并且喜欢使用数组可用的O(1)随机访问(如果您使用的是不可变的
字符串
:s,则更适用,这样对应的
字符串
数组只需要为每个不可变的
字符串
实例生成一次)。

应用于
字符串
实例的实例方法会生成一个
字符串
实例数组,即
[String]
。数组的元素可以用经典的Java/C++方式编制索引(
让thirdElement=array[2]

如果要拆分
字符串
实例(
“peter”
)在单个字符
String
实例的数组中,可以使用
String
实例的
CharacterView
属性,然后将
CharacterView
中的每个
字符
映射回单个字符
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所指出的,上述情况可能适用的一种情况是,如果您经常需要访问特定索引处的
字符串中的字符,并且喜欢使用数组可用的O(1)随机访问(如果您使用的是不可变的
字符串
:s,则更适用于此,这样对应的
字符串
数组只需要为每个不可变的
字符串
实例生成一次).

如果您需要经常访问给定索引中的字符,而不必对每次访问进行线性遍历,那么这是一种很好的方法:)谢谢:)它给了我两个错误(“表达式列表中的预期表达式”、“分隔符”“预期表达式”),但这可能是我的Swift版本(2.1.1)的问题。我也会检查链接的线程。谢谢,帮我不要生气!:D@Hamish这是真的!我真的不知道我对
.map(String.init(:)
变体的真实想法,与
.map{String($0)}相比
,但嘿,为什么不呢:D@scopaest用
let strArray=str.characters.map{String($0)}
替换上面代码段中的第二行,它可能适用于Swift 2.1(已测试并适用于Swift 2.2)@dfri是的,我通常会回到使用闭包表达式的时候,你必须用
消除
init
之间的歧义(:)
,但我想这是一个偏好问题:)如果您需要经常访问给定索引处的字符,而不必对每次访问进行线性遍历,这是一个好方法:)谢谢:)它给了我2个错误(“表达式列表中的预期表达式”、“分隔符”“预期表达式”)但这可能是我的Swift版本(2.1.1)的一个问题。我还将检查链接的线程。谢谢,帮助我不愤怒!:D@Hamish这是真的!我真的不知道我对
.map(String.init(:)
变体的真实想法,与
.map{String($0)}相比
,但嘿,为什么不呢:D@scopaest用
let strArray=str.characters.map{String($0)}
替换上面代码段中的第二行,它可能适用于Swift 2.1(已测试并适用于Swift 2.2)@dfri是的,我通常回到使用闭包表达式的时候,你必须用
(:)
)消除
init
的歧义,但我想这是一个偏好的问题:)