2016-06-06 2 views
1

У меня есть класс 2, у которого одинаковое количество свойств с тем же именем. Я хочу получить доступ к свойствам без литья типов.Как получить доступ к тем же проетам из другого класса без литья типов в swift

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 
} 

Пожалуйста, подсказывают, как можно достичь этого.

+4

Создать протокол с свойством 'amount' и сделать классы совместимыми с протоколом. – dan

ответ

3

Это именно то, для чего используется протокол. Назовем этот новый протокол 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() 
Смежные вопросы