Swift中访问含Optional类型的tuple成员报无成员错误如何解决
报错原因
元组的成员标签不属于类型的一部分,除非你在显式声明类型时明确指定标签。你当前的代码在声明serverResponse类型时只指定了成员类型顺序(Int, String?, String?),没有携带标签,所以赋值时写的message等标签会被类型系统丢弃,无法通过点语法访问命名成员。
解决方案
方案1:声明类型时保留成员标签
显式在类型定义中补充成员标签,即可正常通过命名访问成员:let serverResponse: (statusCode: Int, message: String?, errorMessage: String?) = (statusCode: 255, message: "Welcome", errorMessage: "Error") // 可选类型成员建议先解包再使用 if let message = serverResponse.message { print(message) }方案2:通过下标访问匿名元组成员
如果你不需要保留成员标签,可以直接按元组成员的排列顺序通过下标访问,下标从0开始计数:let serverResponse: (Int, String?, String?) = (statusCode: 255, message: "Welcome", errorMessage: "Error") // 下标1对应第二个成员,即赋值时的message字段 if let message = serverResponse.1 { print(message) }方案3:省略显式类型声明自动推导
赋值时已经携带成员标签的场景,可以省略显式类型声明,让编译器自动推导出带标签的元组类型:let serverResponse = (statusCode: 255, message: "Welcome", errorMessage: "Error") // 也可以用nil合并运算符快速处理Optional默认值 print(serverResponse.message ?? "无返回消息")
内容的提问来源于stack exchange,提问作者Constantine
相关产品推荐
相关产品推荐

