Swift 代码>动物?)。你可能想考虑制作动物< /代码>一个协议,让一致的类型定义他们自己的名称和年龄>代码>属性,你想要什么默认值。这确实是一个非常“快速”的解决方案。我怎样才能知道更多的协议?这似乎是最终的解决办法@本,我建议你从这个开始。从那里开始,只需在谷
Swift 代码>动物?)。你可能想考虑制作动物< /代码>一个协议,让一致的类型定义他们自己的名称和年龄>代码>属性,你想要什么默认值。这确实是一个非常“快速”的解决方案。我怎样才能知道更多的协议?这似乎是最终的解决办法@本,我建议你从这个开始。从那里开始,只需在谷,swift,inheritance,overriding,overloading,Swift,Inheritance,Overriding,Overloading,代码>动物?)。你可能想考虑制作动物< /代码>一个协议,让一致的类型定义他们自己的名称和年龄>代码>属性,你想要什么默认值。这确实是一个非常“快速”的解决方案。我怎样才能知道更多的协议?这似乎是最终的解决办法@本,我建议你从这个开始。从那里开始,只需在谷歌上搜索“swift协议”,你就会发现大量的参考资料和博客文章,涵盖了该主题的不同有趣方面、用例和示例。另外,请看一看有关WWDC14、15和16的相关讨论。这确实是一个非常“快速”的解决方案。我如何了解更多有关协议的信息?这似乎是最终的解决办
代码>动物?)。你可能想考虑制作<代码>动物< /代码>一个协议,让一致的类型定义他们自己的<代码>名称<代码>和<代码>年龄>代码>属性,你想要什么默认值。这确实是一个非常“快速”的解决方案。我怎样才能知道更多的协议?这似乎是最终的解决办法@本,我建议你从这个开始。从那里开始,只需在谷歌上搜索“swift协议”,你就会发现大量的参考资料和博客文章,涵盖了该主题的不同有趣方面、用例和示例。另外,请看一看有关WWDC14、15和16的相关讨论。这确实是一个非常“快速”的解决方案。我如何了解更多有关协议的信息?这似乎是最终的解决办法@本,我建议你从这个开始。从那里开始,只需在谷歌上搜索“swift协议”,你就会发现大量的参考资料和博客文章,涵盖了该主题的不同有趣方面、用例和示例。此外,我们还将看一看有关WWDC14、15和16主题的相关会谈。
class Animals{
var name : String = "default"
var age : Int = 0
func Details()-> String{
return "This animal is a \(name) and has \(age) years old."
}
}
class Dogs : Animals{
name = "dog"
}
class Cats : Animals{
name = "cat"
}
var MyAnimal = Dogs()
var HisAnimal = Cats()
class Animal {
let name: String
var age: Int = 0
/* designated initializer: fully initializes all instance properties */
init(name: String) {
self.name = name
}
func details() -> String {
return "This animal is a \(name) and has \(age) years old."
}
}
class Dog : Animal {
/* designated initializer of subclass: must call a designated
initializer from its immediate superclass */
init() {
super.init(name: "dog")
}
}
class Cat : Animal {
/* ... */
init() {
super.init(name: "cat")
}
}
let myAnimal = Dog()
class Animals {
lazy var name : String = self.defaultName
var defaultName:String { return "default" }
func Details()-> String{
return "This animal is a \(name) and has \(age) years old."
}
}
class Dogs : Animals {
override var defaultName:String { return "dog" }
}
class Animal: CustomStringConvertible {
let name: String
let age: Int
init(name: String = "default", age: Int = 0) { // FIXME: Does a default age of 0 make sense?
self.name = name
self.age = age
}
public var description: String {
return "This animal is a \(name) and is \(age) years old."
}
}
class Dog: Animal {
init() {
super.init(name: "Dog")
}
}
class Cat: Animal {
init() {
super.init(name: "Cat")
}
}
var myAnimal = Dog()
print (myAnimal)
protocol Animal {
static var species: String { get }
var name: String? { get }
var age: Int { get set }
var details: String { get }
}
extension Animal {
static var species: String { return "\(self)".lowercased() }
// since all the properties used in 'details' are blueprinted,
// we might as well supply a default implementation of it.
var details: String {
return "This animal is a \(Self.species)\(name.map{ " named \($0)" } ?? ""), aged \(age)."
}
}
struct Dog: Animal {
let name: String?
var age: Int
init(age: Int, name: String? = nil) {
self.name = name
self.age = age
}
}
var myDog = Dog(age: 3, name: "Fred")
print(myDog.details) // This animal is a dog named Fred, aged 3.
myDog.age = 4 // grats to Fred!
print(myDog.details) // This animal is a dog named Fred, aged 4.
let wildDog = Dog(age: 6) // never named ...
print(wildDog.details) // This animal is a dog, aged 3.
struct Cat: Animal {
let name: String?
var age: Int
init(age: Int, name: String? = nil) {
self.name = name
self.age = age
}
}
var wildCat = Cat(age: 2)
func yieldBirthday<T: Animal>(for animal: inout T) {
print(animal.details)
animal.age += 1
print("This \(T.species) now had a birthday!")
print(animal.details)
}
yieldBirthday(for: &myDog)
/* This animal is a dog named Fred, aged 4.
This dog now had a birthday!
This animal is a dog named Fred, aged 5. */
yieldBirthday(for: &wildCat)
/* This animal is a cat, aged 2.
This cat now had a birthday!
This animal is a cat, aged 3. */