引入类型参数;编译器将允许它采用任何类型。尝试:
func executeRequest<T> (request: APIRequest<T>) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
例如:
class APIRequest<T> {}
class Movie {}
class MovieRequest : APIRequest<Movie> {}
let m = MovieRequest()
//print(m)
func executeRequest<T> (request: APIRequest<T>) {
print(request)
}
executeRequest(m)
Run Code Online (Sandbox Code Playgroud)
类型参数的引入可以使问题更加明确并更好地匹配问题域。例如,就您而言,您肯定无法做APIRequest任何事情;你可以做一个APIRequest,比如说,一个Resource。
protocol Resource {}
class Movie : Resource {}
class Song : Resource {}
class APIRequest<T:Resource> { /* ... */ }
func executeRequest<T:Resource> (request: APIRequest<T>) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)