Swift: 访问数组中元组的成员

4
为什么会出现这个错误? 错误:类型为“Any”(也称为协议<>)的值没有成员“name”。
import UIKit
var alican = (name: "alican", surame:"yilmaz")
var array:[Any] = [alican]
print(array[0].name)

尝试过这个吗?https://dev59.com/G2Af5IYBdhLWcg3w0Vi7 - Umair Afzal
3个回答

6
您声明了数组包含任何类型。如果您像这样声明,错误应该会消失:

您将数组声明为包含任何类型。如果您像这样声明,错误应该会消失:

var array:[(name: String, surame: String)] = [alican]

如果数组需要能够包含任何类型,您可以使用flatMap仅提取与特定类型匹配的内容。

var array:[Any] = [alican]
var nameSurnames = array.flatMap({ return $0 as? (name: String, surame: String) })
print(nameSurnames[0].name)

好的,我明白我需要显式地声明数组的类型。但如果我的元组成员是动态的呢?例如,我想要一个数组,它可以接受元组,但这些元组可能有三个、四个、五个或任何数量的成员,而且它们没有像“名字”、“姓氏”这样的标签。 - L'lynn
在这种情况下,一个元组可能不是你想要的,而是一个带有可选属性的结构体。尽可能避免使用异构集合。 - Fogmeister
扩展了我的答案以考虑到你描述的情况。 - Casey Fleser
好的,谢谢。@Fogmeister所说的可能并不安全。但是我曾经梦想过将具有随机成员的随机元组添加到数组中进行追加。但是我了解到这并不常规和安全。因此,如果我强制使用动态集合,可能类似于nosql结构。在Swift中,我需要使用什么?如果我想要一个具有未知属性以在构造函数中初始化的类,该怎么办呢? - L'lynn

1
只需放弃对数组的输入...
var array = [alican]

Swift会尽可能地推断类型。

只有在无法自动推断变量类型时,才需要显式地指定类型。


1
这是如何访问名字和姓氏的方法。
var alican = (name: "alican", surame:"yilmaz")
var array = [alican]
print(array[0].name)

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