Ios 将列表的字符串转换为列表
有点卡在这里,假设我有一个变量,我们称之为a,等于:Ios 将列表的字符串转换为列表,ios,arrays,swift,swift3,Ios,Arrays,Swift,Swift3,有点卡在这里,假设我有一个变量,我们称之为a,等于: var a = "['Example 1', 'Example 2', 'Example3']" 如何将列表转换为列表,以便使用a[2]访问它(例如) 提前谢谢 您有一个字符串,它不是我所知道的任何有效的数据序列化格式。(例如,它不完全是JSON。) 没有直接的方法将该字符串转换为“列表”(数组?) 要做到这一点,您必须编写一组字符串解析代码 如果使用双引号而不是单引号,那么它将是有效的JSON,并且可以使用JSONSerializatio
var a = "['Example 1', 'Example 2', 'Example3']"
如何将列表转换为列表,以便使用a[2]
访问它(例如)
提前谢谢 您有一个字符串,它不是我所知道的任何有效的数据序列化格式。(例如,它不完全是JSON。) 没有直接的方法将该字符串转换为“列表”(数组?) 要做到这一点,您必须编写一组字符串解析代码 如果使用双引号而不是单引号,那么它将是有效的JSON,并且可以使用JSONSerialization类将其转换为数组 如果使用
replaceCurrencesofString:“”,并使用字符串“\”
将单引号转换为双引号,则可以将生成的字符串转换为数据,然后再转换为数组对象
编辑:
在Swift 3中,从头到尾执行所有操作的代码如下所示:
var string = "['Example 1','Example 2','Example3']"
//Replace ` characters with "
string = string.replacingOccurrences(of: "'", with: "\"")
//Try to convert the string to Data using utf8 encoding
guard let data = string.data(using: .utf8) else {
fatalError()
}
let array = try! JSONSerialization.jsonObject(with: data, options: [])
print("array = \(array)")
请注意,我在上面是懒惰的。如果数据转换失败,我会抛出一个致命错误,并使用try的try!
形式,如果JSON转换失败,它将崩溃。在实际代码中,您可能希望对这两个错误进行错误恢复
编辑#2:
在JSON调用周围添加一个try块,将整个过程转换为函数,尝试将结果转换为字符串数组,并使用linefeed连接结果数组之后,我们得到以下结果:
var string = "['Example 1','Example 2','Example3']"
func convertFunkyStringToStringArray(_ string: String) -> [String]? {
let adjustedString = string.replacingOccurrences(of: "'", with: "\"")
guard let data = adjustedString.data(using: .utf8) else {
return nil
}
do {
let result = try JSONSerialization.jsonObject(with: data, options: [])
return result as? [String]
} catch {
print("Error \(error) deserializing string as JSON")
return nil
}
}
if let array = convertFunkyStringToStringArray(string) {
let joinedString = array.joined(separator: "\n")
print("After conversion, array = \(array). Joined, result = \n\(joinedString)")
} else {
print("Unable to convert string to a [String] array")
}
如前所述,让原始字符串使用JSON之类的常规序列化格式会更好。(它几乎是JSON。如果您只使用双引号而不是单引号,它将是有效的JSON。)您的字符串不是我所知道的任何有效的数据序列化格式。(例如,它不是完全的JSON。) 没有直接的方法将该字符串转换为“列表”(数组?) 要做到这一点,您必须编写一组字符串解析代码 如果使用双引号而不是单引号,那么它将是有效的JSON,并且可以使用JSONSerialization类将其转换为数组 如果使用
replaceCurrencesofString:“”,并使用字符串“\”
将单引号转换为双引号,则可以将生成的字符串转换为数据,然后再转换为数组对象
编辑:
在Swift 3中,从头到尾执行所有操作的代码如下所示:
var string = "['Example 1','Example 2','Example3']"
//Replace ` characters with "
string = string.replacingOccurrences(of: "'", with: "\"")
//Try to convert the string to Data using utf8 encoding
guard let data = string.data(using: .utf8) else {
fatalError()
}
let array = try! JSONSerialization.jsonObject(with: data, options: [])
print("array = \(array)")
注意,我在上面很懒。如果数据转换失败,我将抛出一个致命错误,并使用try代码>try的形式,如果JSON转换失败,它将崩溃。在实际代码中,您可能希望在这两个方面都进行错误恢复
编辑#2:
在JSON调用周围添加一个try块,将整个过程转换为函数,尝试将结果转换为字符串数组,并使用linefeed连接结果数组之后,我们得到以下结果:
var string = "['Example 1','Example 2','Example3']"
func convertFunkyStringToStringArray(_ string: String) -> [String]? {
let adjustedString = string.replacingOccurrences(of: "'", with: "\"")
guard let data = adjustedString.data(using: .utf8) else {
return nil
}
do {
let result = try JSONSerialization.jsonObject(with: data, options: [])
return result as? [String]
} catch {
print("Error \(error) deserializing string as JSON")
return nil
}
}
if let array = convertFunkyStringToStringArray(string) {
let joinedString = array.joined(separator: "\n")
print("After conversion, array = \(array). Joined, result = \n\(joinedString)")
} else {
print("Unable to convert string to a [String] array")
}
如前所述,最好让原始字符串使用JSON等传统序列化格式。(它几乎是JSON。如果您只使用双引号而不是单引号,它将是有效的JSON。)它们真的是单引号还是双引号?因为它可能是JSON(并且很容易转换)。这是真实的生活吗?这只是幻想吗?建议:删除前导的['
,删除尾随的']
,然后按'、'
拆分。如果不遵守语法,将非常糟糕。这个字符串的来源是什么?这是一种糟糕的数据格式。引号中的字符串是否包含撇号?如果是,您是否打算转义这些撇号?(正如其他人所指出的,如果你坚持使用JSON甚至XML等标准格式,你的生活会轻松得多。只需分享有关字符串来源的信息,我们可以进一步建议你。)它们真的是单引号还是双引号?因为它可能是JSON(并且很容易转换)。这是真实的生活吗?这只是幻想吗?建议:删除前导的['
,删除尾随的']
,然后按'、'
拆分。如果不遵守语法,将非常糟糕。这个字符串的来源是什么?这是一种糟糕的数据格式。引号中的字符串是否包含撇号?如果是,您是否打算转义这些撇号?(正如其他人所指出的,如果你坚持使用JSON甚至XML这样的标准格式,你的生活会轻松得多。只需分享有关该字符串来源的信息,我们可以进一步建议你。)这不是一个答案,但这确实是这个问题的最佳答案。我如何转换为数据var b:Data=a.replacingOccurrences(of:“”,with:“\”)
给我一个错误无法将“String”类型的值转换为指定类型的“Data”
两个单独的步骤。使用字符串函数replaceCurrencesofString:withString将单引号转换为双引号,然后使用字符串函数数据(使用:)
将字符串转换为数据
。很抱歉,我对Swift非常陌生,使用:什么?我建议使用NSUTF8编码。这不是答案,但这确实是这个问题的最佳答案。如何转换为数据?var b:Data=a.replacingOccurrences(of:“”,with:“\”)
给我一个错误无法将“String”类型的值转换为指定类型的“Data”
两个单独的步骤。使用字符串函数replaceConcurrencesofString:withString将单引号转换为双引号,然后使用字符串函数data(使用:)
将字符串转换为data
。对不起,我对Swift非常陌生,使用什么?我建议使用NSUTF8编码。