csc*_*arz 26 xcode cocoa protocols ios swift
我正在玩Swift并且遇到以下问题:鉴于我有预定义的类Animal:
//Predefined classes
class Animal {
var height: Float = 0.0
}
Run Code Online (Sandbox Code Playgroud)
我现在Zoo用接受动物的构造函数编写类.但是Zoo希望每只动物都有一个名字,因此定义了Namable协议.
protocol Namable {
var name: String {get}
}
class Zoo {
var animals: Animal[] = [];
}
Run Code Online (Sandbox Code Playgroud)
您如何编写一个addAnimal方法,要求将对象作为参数传递为类型 Animal并符合协议 Namable?你如何为animals阵列声明?
func addAnimal:(animal: ????) { ... }
Run Code Online (Sandbox Code Playgroud)
在Objective-C中,我会写这样的东西
- (void)addAnimal:(Animal<Namable>*)animal {...}
Run Code Online (Sandbox Code Playgroud)
Kev*_*vin 25
您可以将泛型与where具有多个条件的子句一起使用.
func addAnimal<T: Animal where T: Nameable>(animal: T) { ... }
Run Code Online (Sandbox Code Playgroud)
修正案:您应该使整个类成为通用类,以便您可以正确键入数组
class Zoo<T: Animal where T: Nameable> {
var animals : T[] = []
func addAnimal(a: T) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5922 次 |
| 最近记录: |