微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift Generics相当于Java的任何类型<?>

Java中,有时可以使用泛型而不关心实际类型.
你能在 Swift中做到吗?

例如,MyClass< AnyObject>不像MyClass那样工作<?>会在Java中.在我期望它的工作原理相同.

还有其他方法吗?

解决方法

引入一个类型参数;编译器会让它采用任何类型.尝试:

func executeRequest<T> (request: APIRequest<T>) {
 // ...
}

例如:

class APIRequest<T> {}
class Movie {}
class MovieRequest : APIRequest<Movie> {}
let m = MovieRequest()
//print(m)

func executeRequest<T> (request: APIRequest<T>) {
    print(request)
}

executeRequest(m)

类型参数的引入允许一个更明确并且更好地匹配问题域.例如,在您的情况下,您肯定不能对任何事情进行APIRequest;你可以在资源上做一个APIRequest.

protocol Resource {}
class Movie : Resource {}
class Song : Resource {}

class APIRequest<T:Resource> { /* ... */ }

func executeRequest<T:Resource> (request: APIRequest<T>) { /* ... */ }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐