swift 无法将类型“[Any]”的值转换为预期的参数类型“[any Protocol]”

vojdkbi0  于 2023-04-19  发布在  Swift
关注(0)|答案(2)|浏览(138)

我有一个相对简单的设置,目标是在MyListView中的列表中存储不同的类型,但所有类型都符合一定的协议。

protocol HasString {
    var text: String { get set }
}

struct ItemType1: HasString {
    var text: String
}

struct ItemType2: HasString {
    var text: String
    var number: Int
}

struct MyListView: View {
    var list: [any HasString]

    var body: some View {
        ForEach(0..<list.count, id: \.self) {
            index in
            Text(list[index].text)
        }
    }
}

struct MainView<T: HasString>: View {
    let type1 = ItemType1(text: "text1")
    let type2 = ItemType2(text: "text2", number: 1)
    
    var body: some View {
        let list = [type1, type2] //compile error shows here
        MyListView(list: list)
    }
}

我得到错误

Cannot convert value of type '[Any]' to expected argument type '[any HasString]'
svmlkihl

svmlkihl1#

原来这是一个非常小的事情。变量list的类型是[HasString],我所要做的就是在列表后面添加as [any HasString],错误就消失了。

let list = [type1, type2] as [any HasString]
56lgkhnf

56lgkhnf2#

type1type2是不同的结构体,它们的列表[type1, type2]是Any,而[any HasString]不能转换。你需要用HasString转换它们:

let type1 : HasString = ItemType1(text: "text1")
 let type2 : HasString = ItemType2(text: "text2", number: 1)

相关问题