Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将列表的字符串转换为列表_Ios_Arrays_Swift_Swift3 - Fatal编程技术网

Ios 将列表的字符串转换为列表

Ios 将列表的字符串转换为列表,ios,arrays,swift,swift3,Ios,Arrays,Swift,Swift3,有点卡在这里,假设我有一个变量,我们称之为a,等于: var a = "['Example 1', 'Example 2', 'Example3']" 如何将列表转换为列表,以便使用a[2]访问它(例如) 提前谢谢 您有一个字符串,它不是我所知道的任何有效的数据序列化格式。(例如,它不完全是JSON。) 没有直接的方法将该字符串转换为“列表”(数组?) 要做到这一点,您必须编写一组字符串解析代码 如果使用双引号而不是单引号,那么它将是有效的JSON,并且可以使用JSONSerializatio

有点卡在这里,假设我有一个变量,我们称之为a,等于:

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)")
注意,我在上面很懒。如果数据转换失败,我将抛出一个致命错误,并使用
trytry的形式,如果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编码。