Swift - 将任意类型数组转换为字符串数组

10

我该如何将最初声明为任何对象容器的数组转换为字符串(或其他任何对象)数组? 示例:

var array: [Any] = []
.
.
.
array = strings // strings is an array of Strings

我收到一个错误信息:“无法将字符串类型分配给任何类型”

我该怎么办?


2
我认为这是不可能的。你可以尝试将字符串强制转换为! [AnyObject],以在数组引用中使用它。 - Josip B.
4个回答

10

一旦变量被声明,就无法更改其类型,因此您必须创建另一个变量,例如通过使用 flatMapAny 类型的项目安全地映射到 String 类型:

var oldArray: [Any] = []
var newArray: [String] = oldArray.flatMap { String($0) }

5

已更新至Swift 5

var arrayOfAny: [Any] = []
var arrayOfStrings: [String] = arrayOfAny.compactMap { String(describing: $0) }

0
您可以使用这个语法糖。仍然只需要一行代码 :)
var arr: [Any] = []
var strs = [String]()
arr = strs.map {$0 as! [String]}

在我的游乐场测试中,我不需要将它转换为[String]。这真的有必要吗?而且我想你是指strs.map而不是arr.map? :) - Eendje
我认为这个问题是“编译器是否可以将arr视为[String]”,就像你重新声明它一样。顺便说一下,我还没有测试过这段代码。 - Josip B.
@Eendje 不需要再次将其转换为[String]。我经常这样做是为了阅读目的。 - hqt
这个答案没有多大意义。它接受一个空字符串数组,并试图通过强制将每个字符串转换为字符串数组来进行映射。这将因为几个原因而失败。 - undefined

-1

声明数据并将其读入变量中,这样做实在太烦人了。我已经决定将数据声明在pList文件中,然后简单地读取它。

你可以使用`contentsOfFile`。

这是一个不错的解决方案链接:https://stackoverflow.com/a/60804155/1058199 `


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接