Я родом из мира Java. Сейчас программирую на Swift 4.
Я хотел бы реализовать абстрактный класс в Swift, я знаю, что в Swift нет такого понятия абстрактного класса. Но я знаю, что мы могли бы имитировать эту концепцию в Swift, используя протокол. Например, это то, что я пробовал:
// With protocol, I can define functions that concrete class have to implement
protocol ProductProvider {
func getProductNumber() -> Int
}
// with protocol extension, I can define shared (computed) properties and functions among concrete classes that comply with this protocol
extension ProductProvider {
var maxProductCount: Int {
return 10
}
}
Но теперь я хотел бы иметь общую переменную, которую можно было бы установить и получить («общая» означает, что она будет использоваться совместно с классами, соответствующими этому протоколу):
extension ProductProvider {
var maxProductCount: Int {
set(newValue) {
// set to what if I couldn't define private stored variable in extension to hold the most recent set value ?
}
get{
// how to return the most recent value set?
}
}
}
Мой вопрос в комментарии выше кода. Как я могу сделать этот набор и получить переменную в расширении протокола в Swift 4? Если это невозможно, какие возможны обходные пути?
maxProductCount
на самом деле не должно быть вычисляемым свойством. В Swift нет необходимости в частных резервных переменных, геттерах и сеттерах. - person Dávid Pásztor   schedule 04.10.2018