无法调用'追加'使用类型'(字符串)'的参数列表

时间:2015-05-01 04:50:11

标签: swift

这里有什么问题以及如何解决这个问题?

struct Venue {
    let building: String
    var rooms: [String]?
}

func addRoom(building: String, room: String) {
    if let venueIndex = find(venues.map {$0.building}, building) {
        venues[venueIndex].rooms.append(room) //Cannot invoke 'append' with an argument list of type'(String)'
    }
}

var venues: [Venue] = [...]

1 个答案:

答案 0 :(得分:5)

问题是venues[venueIndex].rooms不是[String]而是[String]?。 Optionals没有append方法 - 包含在其中的值可能,但它们没有。

如果不是nil,您可以使用可选链接进行追加:

venues[venueIndex].rooms?.append(room)

但您可能希望将rooms初始化为空索引,而不是nil,在这种情况下,您需要执行稍微杂乱的分配而不是追加:

venues[venueIndex].rooms = (venues[venueIndex].rooms ?? []) + [room]

然而,值得问自己,rooms真的需要是可选的吗?或者它可能只是一个非可选数组,起始值为空?如果是这样,这可能会简化您的大部分代码。