Swift編碼總結1
阿新 • • 發佈:2018-04-21
atm 本質 smi reg mode bsp ani any 一個
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 繼承。
Swift編碼總結1