{"id":7379,"date":"2022-09-12T20:23:22","date_gmt":"2022-09-12T12:23:22","guid":{"rendered":"http:\/\/123.57.164.21\/?p=7379"},"modified":"2022-09-13T22:19:41","modified_gmt":"2022-09-13T14:19:41","slug":"swift5-%e5%9b%9b%e7%a7%8d%e4%bc%a0%e5%80%bc%e6%96%b9%e5%bc%8f","status":"publish","type":"post","link":"https:\/\/92it.top\/?p=7379","title":{"rendered":"Swift5-\u56db\u79cd\u4f20\u503c\u65b9\u5f0f"},"content":{"rendered":"\n<p><strong>\u4e00\u3001\u5355\u4f8b<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<ul><li>1.\u521b\u5efa<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class testSwiftView: NSObject {\n    static let shareInstance = testSwiftView()\n    func getString(){\n        print(\"single\")\n    }\n}<\/pre>\n\n\n\n<ul><li>2.\u4f7f\u7528<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">testSwiftView.shareInstance.getString()<\/pre>\n\n\n\n<ul><li>3.\u9a8c\u8bc1\u662f\u5426\u552f\u4e00<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">let obj = testSwiftView.shareInstance\nprint(Unmanaged.passUnretained(obj).toOpaque()) \/\/ \u6253\u5370\u5185\u5b58\u5730\u5740<\/pre>\n\n\n\n<p><strong>\u4e8c\u3001\u4ee3\u7406<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<ul><li>1.\u5b9a\u4e49\u58f0\u660e\u534f\u8bae<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public protocol testDelegate: AnyObject {\/\/\u5fc5\u987b\u5b9e\u73b0\n    func changeString(newString: String)\n}\nextension testDelegate {\/\/\u53ef\u9009\u5b9e\u73b0\n    public func printString(newString: String){}\n}\n\nclass testSwiftView: UIView {\n    public weak var delegate: testDelegate?\n    func testFun(){\n        self.delegate?.changeString(newString: \"hahaha\")\n    }\n}<\/pre>\n\n\n\n<ul><li>2.\u9075\u5b88\u534f\u8bae\uff0c\u5b9e\u73b0\u4ee3\u7406\u65b9\u6cd5<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ViewController: UIViewController, testDelegate {\n    func changeString(newString: String) {\n        print(newString) \n    }\n    func printString(newString: String) {\n        print(newString)\n    }\n    override func viewDidLoad() {\n        let obj = testSwiftView()\n        obj.delegate = self\n        obj.testFun()\n    }\n}<\/pre>\n\n\n\n<p><strong>\u81ea\u5df1\u5199\u7684\u4e00\u4e2a\u4ee3\u7406\u4f20\u503c\u7684\u4f8b\u5b50<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5b9a\u4e49\u4e00\u4e2a\u534f\u8bae\nprotocol SearchDelegate: NSObjectProtocol {\n    func searchWithParams(params: Dictionary&lt;String, String>)\n}\n\/\/ \u7236\u4eb2Controller\u5b9e\u73b0\u8fd9\u4e2a\u534f\u8bae\nextension ParentViewController: SearchDelegate{\n    func searchWithParams(params: Dictionary&lt;String, String>) {\n        self.params = params\n        xxxxx\n    }\n}\n\n\nclass ParentViewController: UIViewController {\n        let vc = ChildViewController()\n        \/\/ \u6307\u5b9aChildViewController searchDelegate \u4e3a ParentViewController\n        vc.searchDelegate = self\n        vc.modalPresentationStyle = .custom\n        vc.modalTransitionStyle = .crossDissolve\n        self.present(vc, animated: true, completion: nil)\n}\n\nclass ChildViewController: UIViewController {\n\n    weak var searchDelegate: SearchDelegate?\n \n    @IBAction func selectRoomList(_ sender: UIButton) {\n        var params: [String: String] = [:]\n        \/\/ \u8c03\u7528\u4ee3\u7406\u7684\u65b9\u6cd5\uff0c\u5e76\u4e14\u628a\u503c\u4f20\u7ed9\u4ee3\u7406\u7684Controller\n        searchDelegate?.searchWithParams(params: params)\n        self.dismiss(animated: true)\n    }\n}\n<\/pre>\n\n\n\n<p><strong>\u4e09\u3001\u95ed\u5305 (\u5373oc\u7684block)<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<ul><li>1.\u5b9a\u4e49\u95ed\u5305<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">typealias swiftBlock = (_ str: String) -> Void\n\/\/\u5199\u6cd52: typealias swiftBlock = (_ str: String) -> ()\nclass testSwiftView: UIView {\n    \/\/\u95ed\u5305\uff1a\u51fd\u6570\u53c2\u6570\n    func callBackBlock(_ block: @escaping swiftBlock) {\n        block(_:\"\u95ed\u5305\u4f20\u503c1\")\n    }\n    \n    \/\/\u95ed\u5305\uff1a\u53d8\u91cf\n    var callBack : swiftBlock?\n    func useBlock(){\n        if callBack != nil {\n            callBack!(\"\u95ed\u5305\u4f20\u503c2\")\n        }\n    }\n}\n<\/pre>\n\n\n\n<ul><li>2.\u4f7f\u7528\u95ed\u5305<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ViewController: UIViewController {\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        let obj = testSwiftView()\n        \n        \/\/\u51fd\u6570\n        obj.callBackBlock { (str) in\n            print(str)\n        }\n        \n        \/\/\u53c2\u6570\n        obj.callBack = { (str: String)->Void in\n            print(str)\n            return\n        }\n        obj.useBlock()\n    }\n}<\/pre>\n\n\n\n<p><strong>\u81ea\u5df1\u5199\u7684\u95ed\u5305\u4f20\u503c\u7684\u4f8b\u5b50<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">typealias  TimeFilterBlcok = (_ beginTime: String, _ endTime: String) -> Void\n\nclass ChildController: UIViewController {\n\n    \n    var callBackBlock: TimeFilterBlcok?\n\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n    }\n\n    \n    @IBAction func confirmButtonAction(){\n\n        callBackBlock!(beginStr!,endStr!)\n        self.dismiss(animated: true)\n    }\n}\n\nclass ParentViewController: UIViewController {\n\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n    }\n    \n    \n    @IBAction func timeButtonAction(){\n        let vc = ChildViewController()\n        vc.beginStr = self.beginStr\n        vc.endStr = self.endStr\n        vc.callBackBlock = {[weak self] (beginTime,endTime) in\n            self?.timeSelectButton?.setTitle(\"\\(beginTime) - \\(endTime)\", for: .normal)\n            self?.beginStr = beginTime\n            self?.endStr = endTime\n        }\n        vc.modalPresentationStyle = .custom\n        vc.modalTransitionStyle = .crossDissolve\n        self.present(vc, animated: true, completion: nil)\n    }\n\n}\n\n<\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>\u56db\u3001\u901a\u77e5<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<ul><li>1.\u6dfb\u52a0\u901a\u77e5 (\u7528\u4e8e\u63a5\u6536\u901a\u77e5,\u9500\u6bc1\u65f6\u8bb0\u5f97\u91ca\u653e\u6dfb\u52a0\u7684\u901a\u77e5)<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \/\/\u6dfb\u52a0\u901a\u77e5\n        NotificationCenter.default.addObserver(self, selector:#selector(test1(notification:)), name: NSNotification.Name(\"testnotification\"), object: nil)\n    }\n    \n    \/\/\u63a5\u6536\u901a\u77e5\u5904\u7406\u65b9\u6cd5\n    @objc func test1(notification:NSNotification) -> Void {\n           let userinfo = notification.userInfo as![String:AnyObject]\n           \n           print(\"\u8fd9\u662f\u4e2a\u901a\u77e5:\",userinfo[\"\u901a\u77e5\"] as!String)\n       }\n    \/\/\u91ca\u653e\u79fb\u9664\u901a\u77e5\n    deinit {\n           NotificationCenter.default.removeObserver(self)\n    }\n    \n}<\/pre>\n\n\n\n<ul><li>2.\u53d1\u51fa\u901a\u77e5<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">NotificationCenter.default.post(name: NSNotification.Name(\"testnotification\"), object: self, userInfo:[\"\u901a\u77e5\":\"\u901a\u77e5\u4f20\u503c\"])\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u5355\u4f8b 1.\u521b\u5efa 2.\u4f7f\u7528 3.\u9a8c\u8bc1\u662f\u5426\u552f\u4e00 \u4e8c\u3001\u4ee3\u7406 1.\u5b9a\u4e49\u58f0\u660e\u534f\u8bae 2.\u9075\u5b88\u534f\u8bae\uff0c\u5b9e\u73b0\u4ee3\u7406\u65b9\u6cd5 \u81ea\u5df1\u5199 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,8],"tags":[],"_links":{"self":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/7379"}],"collection":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7379"}],"version-history":[{"count":3,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/7379\/revisions"}],"predecessor-version":[{"id":7387,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/7379\/revisions\/7387"}],"wp:attachment":[{"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}