我都这样做,并且不明白为什么这个游乐场的最后一行会引发编译错误:
protocol Model { }
struct Post: Model {
var content = "Hello"
}
struct Posts: Model {
var allPosts: [Post] = [Post(), Post(), Post()]
}
func handler(items: [Model]) { }
var posts = Posts()
handler(posts.posts)
如果你在两行之间阅读,我的目标是能够调用一个参数,该参数是一个符合协议的结构数组。该函数应该能够处理不同类型结构的数组。很想知道我错过了什么,如果你有一个更好的解决方案的建议。
谢谢!
答案 0 :(得分:1)
似乎是Swift
限制。但您可以使用Generics
:
func handler<T: Model>(items: [T]) { }
或者使您的协议成为@objc
协议,您只能将其应用于类类型:
@objc protocol Model { }
class Post: Model {
var content = "Hello"
}