我有2个类,它们具有相同名称的相同数量的属性。我想访问属性而不进行类型转换。

class A : NSObject {
    var amount : Int = 10
}

class B : NSObject {
    var amount : Int = 20
}

现在我想将数量属性的值加倍
main() {
    let classA : A()
    print(doubleValue(classA))

    let classB : B()
    print(doubleValue(classB))
}

func doubleValue(myClass:AnyObject) -> Int {
    return myClass.amount * 2
}

请提出我该如何实现。

最佳答案

这正是所使用的协议。让我们将此新协议称为Amountable并添加amount属性。

protocol Amountable {
    var amount: Int { get set }
}

如果要为doubleValue()提供默认实现,则可以使用协议扩展事件,如下所示:
extension Amountable {
    mutating func doubleValue() {
        self.amount *= 2
    }
}

最后,让您的类符合协议:
class ClassA: Amountable {
    // Implementation of classA here
}

class ClassB: Amountable {
    // Implementation of classB here
}

objectA = ClassA()
objectA.doubleValue()

关于ios - 如何在不进行类型强制转换的情况下从不同的类访问相同的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37661816/

10-12 21:34