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. */