Arrays 转换[字符串]?迅速插队
对于我的项目,我从Swift中的CSV文件中提取推文。问题是现在所有tweet都被解析为数组中的一个元素,用“,”分隔 错误消息:“[String]?”没有名为的成员 “由字符串分隔的组件”Arrays 转换[字符串]?迅速插队,arrays,xcode,string,swift,Arrays,Xcode,String,Swift,对于我的项目,我从Swift中的CSV文件中提取推文。问题是现在所有tweet都被解析为数组中的一个元素,用“,”分隔 错误消息:“[String]?”没有名为的成员 “由字符串分隔的组件” 我检查了tweetsOfColumns是否包含多个元素,但它不允许我使用tweetsOfColumns[index]下标 columns["tweet"] 它将返回一个可选值,因为如果没有与键相关联的内容,它将返回nil(None),否则将返回包装在可选值(Some(data))中的值。 因此,您必须展开
我检查了tweetsOfColumns是否包含多个元素,但它不允许我使用tweetsOfColumns[index]下标
columns["tweet"]
它将返回一个可选值,因为如果没有与键相关联的内容,它将返回nil(None),否则将返回包装在可选值(Some(data))中的值。
因此,您必须展开可选文件,例如:
columns["tweet"]!
您必须使用可选的
?
来访问字符串:
let seperatedColumns = tweetsOfColumns?.componentsSeparatedByString(",")
但你应该打开它:
if let unwrappedTweets = tweetsOfColumns?.componentsSeparatedByString(","){
let seperatedColumns = unwrappedTweets
}
问题可能是你会得到一个可选的背部,你必须打开它。最简单、最优雅的方法是使用if-let展开器
if let tweetsOfColumns = columns["tweet"] {
let seperatedColumns = tweetsOfColumns.componentsSeparatedByString(",")
// do something with the seperatedColumns
}
根据David的问题和OP在OP评论中的回复,您可以在列[“tweet”]返回的数组上使用map。请在将来发布实际数据/代码
let columns = [
"tweet":["handleX,tag1,tag2,textA,textB",
"handleY,tag1,tag2,textC,textD"]]
var chunk = [[String]]()
if columns["tweet"] != nil {
chunk = columns["tweet"]!.map {
return $0.componentsSeparatedByString(",")
}
}
查看您引用的链接,
列[“tweets”]
将从“tweets”列返回一个值数组,所以这是您已经需要的,并没有额外的逗号用于拆分内容,您只需要:
let seperatedColumns = columns["tweet"]
使数组包含每行的tweet列。在此处显示“tweetsOfColumns”输出。..tweetsOfColumns只是一组测试tweet、带有句柄的tweet、hashtags和内容@dasblinkenlight所有tweet都保存为数组中的一个元素。我似乎无法单独访问推文。我想对它们执行一些正则表达式来提取句柄、hashtags等。显示
列的声明/创建
我从错误消息中猜测是[String:[String]]
而不是答案似乎假设的[String:String]
。在这种情况下,可选的展开将使您进入[String]
,它不需要传递给组件,因为它已被拆分。它确实以[String]而不是String返回,我无法对[String]执行有意义的操作。这些列是在SwiftCSV项目打开的情况下创建的。如果我尝试通过任何一种方式打开它,错误消息会不断出现:“[String]”没有名为“componentsSeparatedByString”的成员是的,就是这样,感谢大家的快速帮助和建议。如果合适并回答了您的问题,请不要忘记接受答案。(点击答案旁边的复选标记)这将鼓励人们在将来回答问题。
let seperatedColumns = columns["tweet"]