type(of: )
это вывод типа динамически, но компилятору глубоко и с колокольни до этого. Он видит только тип, который Вы указали изначально. Это и правильно! Нет никаких если, если вам нужна некая функциональность у потомков в рамках родителя, то создавайте протокол и описывайте их. Это основы ООП class Printer {
static func mustprint() {
print ("was printed")
}
}
Printer.mustprint()
class Printer {
func mustprint() {
print ("was printed")
}
}
let printer = Printer(); printer.mustprint()
UITabBarItem
и UITabBarController
. Переопределеют нужные св-ва и методы. В первую очередь переопределить св-во selectedItems
на свой подкласс и методы выбора по нажатию, добавив в них layer
анимацию. path
залив его цветом .clear
. Путь - круг и идущая от него линия. Причём, если элемент самый крайний, то линия ток слева или справа, для остальных она в обе стороны. Останется добавить лишь strokeEndAnimation
, которая будет заливать цветом этот путь идя от начало пути в конец. Об этом хорошо написано тут: https://www.calayer.com/core-animation/2017/12/25/...reloadData
cellForRowAt indexPath
у вас бeдет что-то типа:cell.label.text = models[indexPath.row].title
func tableView(UITableView, cellForRowAt: IndexPath)
просто возвращаем инстансы статических ячеек для последних трех позиций и инстансы динамической для остальных.xcodebuild -exportArchive -exportOptionsPlist options.plist -archivePath your_app.xcarchive -exportPath <путь куда сохранить ipa-файл>
struct Row {
let title: String
let generator: (Parameters) -> UIViewController
}
let section: [Row] = [
Row(title: "first", generator: { (parameters) -> UIViewController in
return FirstViewController()
}),
Row(title: "second", generator: { (parameters) -> UIViewController in
return SecondViewController()
})
]
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let row = section[indexPath.row]
let vc = row.generator(Parameters)
navigationController?.pushViewController(vc, animated: true)
}