Swift编码总结1
1. fileprivate (set) var hasSetDiscount = false中fileprivate (set)表示什么意思:
//设置setter私有,但是getter为public
2.取值需要判断:
if let text = textField.text, !text.isEmpty {}
if let finish = resultDic["finish"] as? Bool,finish { // finish为true }else{ // finish为false }
3.flatMap使用:
dataSource = dataSource.flatMap({ (model) -> TipModel? in model.isChoosen = false return model })
4.dismiss之后push回到某个页面:
self.dismiss(animated: false, completion: { let dvc = DishAAController() dvc.personNum = num if let tempNav = (UIApplication.shared.delegate as? AppDelegate)?.window?.rootViewController as? BaseNavigationController{ for vc in tempNav.childViewControllers { if vc.isKind(of: WaiterHomeViewController.self){ vc.navigationController?.pushViewController(dvc, animated: false) } } } })
5.根据类型选择不同的值:
使用枚举和结构体。 import UIKit struct ApplyPayModel { let type: ApplyPayType let qrString: String var title: String{ return type.typeName() } var desc: String { return type.infoString } } enum ApplyPayType: String { case ali = "ali" case wechat = "wechat" case card = "card" func typeName() -> String { switch self { case .ali: return GLOBAL_LANGUAGE("支付宝") case .wechat: return GLOBAL_LANGUAGE("微信支付") case .card: return GLOBAL_LANGUAGE("欢乐E卡") } } func getPayCompanyImageName()-> String { switch self { case .ali: return "AliPay" case .wechat: return "WeChat" case .card: return "ChinaMerchantsBank" } } var infoString: String { switch self { case .ali: return GLOBAL_LANGUAGE("支付宝扫码 开通自动买单功能") case .wechat: return GLOBAL_LANGUAGE("微信扫码 开通自动买单功能") case .card: return GLOBAL_LANGUAGE("欢乐E卡 开通自动买单功能") } } }
6.点击弹出控制器:
class LanguageViewController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() self.tableView.registerClassFromClass(type: UITableViewCell.self) } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) if let presentingViewController = self.presentationController { let size = tableView.sizeThatFits(presentingViewController.containerView?.size ?? .zero) self.preferredContentSize = CGSize(width: 200, height: size.height) } } }
7.控制器传model初始化控制器:
let model: CardPayHistoryInfoModel init(payinfo: CardPayHistoryInfoModel) { self.model = payinfo super.init(nibName: "NFCCardPrintPreviewController", bundle: nil) }
8.Struct定义model和Class定义model区别:
Swift中的类与结构体有如下相似点: 1.定义属性来存储值。 2.定义函数来提供功能。 3.通过定义下标语法使用下标的方式取值。 4.定义构造方法来对其进行初始化。 5.通过扩展来在原始基础上添加功能。 6.通过协议来定义实现标准。 当然类和结构体也有许多不同点,下面这些功能是类独有的,结构体没有: 1.通过继承来创建类的子类。 2.在运行时允许对类的实例进行类型的检查和解释。 3.析构方法可以释放被类引用的资源。 4.通过引用计数允许一个类实例的多处引用。 当开发者在代码中传递这些实例时,结构体总是被赋值,而类则是被引用。这是结构体和类的最本质区别。
9.对Action统一结构体处理:
fileprivate struct Action { static let backClick = #selector(ScreenSaverController.back(_:)) }
10.where Self: UIView 中的where Self是什么意思?
@objc protocol NavigationBarProtocol: NSObjectProtocol { func updateViewForLanguage() } extension NavigationBarProtocol where Self: UIView{ func configBackgroundColor() { self.backgroundColor = UIColor(hexString: "1f2124") } func addWaiterLoginSwipe(){ self.viewController?.addWaiterLoginSwipe() } }
NavigationBarProtocol这个协议只能被 UIView 继承。
请发表评论