无法使用类型'([Post])'

时间:2015-05-22 02:26:19

标签: ios swift generics

我都这样做,并且不明白为什么这个游乐场的最后一行会引发编译错误:

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)

如果你在两行之间阅读,我的目标是能够调用一个参数,该参数是一个符合协议的结构数组。该函数应该能够处理不同类型结构的数组。很想知道我错过了什么,如果你有一个更好的解决方案的建议。

谢谢!

1 个答案:

答案 0 :(得分:1)

似乎是Swift限制。但您可以使用Generics

执行此类解决方法
func handler<T: Model>(items: [T]) { }

或者使您的协议成为@objc协议,您只能将其应用于类类型:

@objc protocol Model { }

class Post: Model {
    var content = "Hello"
}