1. 程式人生 > >swift 4 使用小結(與OC差異比較大的寫法)

swift 4 使用小結(與OC差異比較大的寫法)

1. 懶載入

   lazy var imageView:UIImageView = {
        let imageView = UIImageView()
        imageView.image = UIImage.init(named: "big_image")
        return imageView
    }()

2. 按鈕的點選事件

    lazy var button:UIButton = {
        let button = UIButton()
        button.setTitleColor(UIColor.red, for
: .normal) button.backgroundColor = UIColor.white button.layer.cornerRadius = 2.0 button.layer.masksToBounds = true button.isHidden = true button.addTarget(self, action: #selector(buttonClick(_ :)), for: .touchUpInside) return button }() @objc func buttonClick(_ button
:UIButton) -> () { }

3. 協議可選與必選,delegate是否實現協議

  • 必選協議
protocol ImageViewDelegate: class {
    func selectedImage() -> ()
    func removeImage(_ index: Int) -> ()
}
  • 可選協議
@objc protocol ImageCellDelegate: NSObjectProtocol {
    @objc optional func imageCelllLikeButtonClick(imageCell: ImageCell, commentId: String, userLiked:Bool)
->
() @objc optional func imageCellDetalButtonClick(imageCell: ImageCell, content:String) -> () }
  • 代理
weak var delegate:ImageCellDelegate?

注意: 代理繼承的父類 class和NSObjectProtocol 的區別

代理繼承的父類NSObjectProtocol的時候,判斷代理是否實現某個方法responds(to: #selector()能提示處理,繼承自class則沒法判斷
ImageCellDelegate.實現的方法去判斷!!!

  • 代理是否實現了某個協議
    @objc func buttonClick(_ button:UIButton) -> () {
        guard let delegate = delegate else { return }
        if delegate.responds(to: #selector(ImageCellDelegate.imageCellButtonClick(imageCell:content:))) {
            delegate.imageCellButtonClick!(imageCell: self, content: commentLabel.text)
        }
    }

4. 判斷是某個類或某個類及其子類

//判斷某個類
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if scrollView.isMember(of: tableView.classForCoder) {
            view.endEditing(true)
        }
    }

//判斷某個類及其子類
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if scrollView.isKind(of: tableView.classForCoder) {
            view.endEditing(true)
        }
    }

5. tableView的重新整理

//重新整理所有
self.tableView.reloadData()
//重新整理分組
self.tableView.reloadSections([1], with: .none)
//重新整理某一個cell或者幾個cell
self.tableView.reloadRows(at: [indexPath], with: .none)

6. 正則匹配特定的圖片連結

class func getTopicContentImageUrlLink(_ range: NSRange, _ pattern: String = "<img src=\"(.*?)\">", _ content: String) -> [URL] {     
        var imageUrlArr: [URL] = []

        //利用正則匹配
        let pattern = pattern
        guard let regularExpression = try? NSRegularExpression.init(pattern: pattern, options: .dotMatchesLineSeparators) else { return []}
        let regularResults = regularExpression.matches(in: content, options: [], range: NSMakeRange(0, content.count))

        for textCheckingResult in regularResults {
            //查詢到的範圍數量
            // 0: 和匹配方案完全一致的字串
            // 1: ()中需要匹配的字串
            for idx in 0..<textCheckingResult.numberOfRanges {
                let range = textCheckingResult.rangeAt(idx)
                let subStr = (content as NSString).substring(with: range)
                let url = URL(string: subStr)
                if idx == 1 && url != nil {
                    imageUrlArr.append(url!)
                }
            }
        }
        return imageUrlArr
    }

7. swift中NSString的UTF-8轉碼

let content = (newString as NSString).addingPercentEscapes(using: String.Encoding.utf8.rawValue)!

8. GCD通訊與延遲操作

        //執行緒通訊
        DispatchQueue.global().async {
            //do async something
            DispatchQueue.main.async {
                //main thread do UI update
            }
        }
        //延遲操作  DispatchTime 的精度是納秒
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 10) {

        }
        DispatchQueue.global().asyncAfter(deadline: DispatchTime.now() + 10) {

        }
        //DispatchWallTime 的精度是微秒
        DispatchQueue.global().asyncAfter(wallDeadline: DispatchWallTime.now() + 2.0) {

        }

9. 陣列中取子陣列

let arr = [1,2,3,4,5]
//是個切片陣列和陣列之間可以轉化
let arrSlice = arr[0..<3]
let subArr = Array(arrSlice)

10. 通知

//通知名稱
let ZQPCouponCellSelectedCoupon: Notification.Name = Notification.Name(rawValue: "ZQPCouponCellSelectedCoupon")
//發通知
NotificationCenter.default.post(name: ZQPCouponCellSelectedCoupon, object: couponModel)
//接通知
NotificationCenter.default.addObserver(self, selector: #selector(selectedCoupon(_ :)), name: ZQPCouponCellSelectedCoupon, object: nil)
//響應事件
@objc func selectedCoupon(_ notication: Notification) {
    let couponModel = notication.object as! ZQPPlanPlayRedEnvelopeModel
}

11. 時間與時間戳

//當前時間---毫秒級 時間戳 - 13位
let timeInterval: TimeInterval = Date().timeIntervalSince1970
let currentMillisecond = CLongLong(round(timeInterval*1000))
print(currentMillisecond)

`1532068608613`

//當前時間---秒級 時間戳 - 10位
let timeInterval: TimeInterval = Date().timeIntervalSince1970
let currentSecond = Int(timeInterval)
print(currentSecond)

`1532068723`

12. 純swift專案使用YYModel轉模型問題

屬性前[email protected],否則字典轉模型不成功

class PersonModel: NSObject {
    //姓名
    @objc var name: String?
    //年齡
    @objc var age: Int = 0
}

13. 單例

static let sharedInstance = ZYManagerController()

14. 訪問庫的差別

//OC
#import <uikit/UIGestureRecognizerSubclass.h>

//Swift
import UIKit.UIGestureRecognizerSubclass

15. 字串對映類

//注意,確保string有值,否則每一步轉換,都要guard防衛
let childrenControllerString: String = item[RootVcName] as! String
let nameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String
let childrenControllerClass = NSClassFromString(nameSpace + "." + childrenControllerString)
let childrenControllerType = childrenControllerClass as! UIViewController.Type
let childrenController = childrenControllerType.init()

相關推薦

swift 4 使用小結(OC差異比較寫法)

1. 懶載入 lazy var imageView:UIImageView = { let imageView = UIImageView() im

MySQLOracle 差異比較-基本語法

1、 查詢行數自增1 Oracle:中select rownum , a.* from fdcom a Mysql: select @ROWNO := @ROWNO + 1 as rownum , a.* from (select shortname from

利用PHP腳本輔助MySQL數據庫管理4-兩個庫表結構差異比較

for mysql ase array 表結構差異 [] 結構 _array 輔助 <?php define(‘DATABASE1‘, ‘coffeetest‘); $dbi1 = new DbMysql; $dbi1->dbh = ‘mysql://

MySQLOracle SQL語言差異比較

Oracle與MySQL的SQL語句區別 1資料庫 /*   mysql可以建立資料庫,而oracle沒有這個操作,oracle只能建立例項;   sql資料庫操作:database   格式:   &nbs

布隆過濾器 Swift 4.2

作者:Soroush Khanlou,原文連結,原文日期:2018-09-19 譯者:WAMaker;校對:numbbbbb,小鐵匠Linus;定稿:Forelax Swift 4.2 為雜湊的實現帶來了一些新的變化。在此之前,雜湊交由物件本身全權代理。當你向物件索取 雜湊值(hashValue)

資料,springcloud 的 EurekaZooKeeper 的比較

Eureka與ZooKeeper 的比較(轉) 原文https://www.cnblogs.com/zgghb/p/6515062.html         Eureka的優勢 1、在Eureka平臺中,如果某臺伺服器宕

ocswift混編,OC呼叫swiftswift呼叫OC

1、oc工程呼叫swift-----自動建立橋接標頭檔案 建立一個oc工程: 設定Product Module Name = 工程名 建立一個swift檔案: 點選自動建立橋接標頭檔案: 設定Objective-C Bridging Header 如下圖:

ASP.NET C# 不同瀏覽器在 buffer 緩衝區 Response.Flush() 表現差異比較 « 關於網路那些事...

ASP.NET C# 不同瀏覽器在 buffer 緩衝區 與Response.Flush() 表現差異比較 ASP 輸出內容到網頁的方式基本上有兩種 直接輸出 緩

apache2.4版本2.2版本的差異

1、在2.2版本中eventMPM還處於測試階段,而2.4版本event已經可以正常使用了 2、2.4版本的3個MPM工作模式使用的是DSO動態模組來實現的,而2.2則是直接編譯成了靜態模組 3、2.4版本切換MPM工作模式是在/etc/httpd/conf

PDMERP的差異比較說明

  近年來,在企業資訊化過程中,作為幫助企業提高生產效率的企業資源規劃(ERP)和產品資料管理(PDM)這兩種工程軟體使用愈來愈廣泛,但如何正確地部署它們卻並非每家企業都明白。要正確地利用這兩類軟體,弄清其異同是關鍵。   PDM系統出現於如世紀80年代,

一張圖解讀工業4.0物聯網,雲端計算和資料的關係

網際網路新概念層出不窮,在雲端計算,物聯網,大資料火熱之後,工業4.0在2014年受到越來越多的關注,在2015年成為新的熱點之前,我們有必要了解這個新概念究竟是什麼含義,它和其他網際網路概念間到底是什麼關係。         2013年4月,德國政府在2013年4月的漢諾威工業博覽會上正式推出提出“

Swift開發指南:使用SwiftCocoa和Objective-C(Swift 4)

與Objective-C API進行互動 互操作性是能夠在任何一個方向上與Swift和Objective-C進行介面,讓您訪問並使用以其他語言的檔案中的一些程式碼。當您開始將Swift整合到應用程式開發工作流程中時,瞭解如何利用互操作性來重新定義、改進和增

SwiftOC中拷貝可變性總結

為了解釋方便,定義兩個類:Person和MyObject,它們都繼承自NSObject。他們的關係如下: // Person.h @property (strong, nonatomic, nullable) MyObject *object; // MyObjec.h @property (copy,

iOS8開發~Swift(五)SwiftOC混編

一、概要 首先看《The Swift Programming Language》中提到“Swift’s compatibility with Objective-C lets you create a project that contains files written

iOS開發之swiftOC混編出現的坑,oc中不能對swift的代理進行呼叫,不能訪問swift中的代理,swift中的回撥方法

1. swift與oc混編譯具體怎麼實現,這兒我就不重複講出了,網上有大把的人講解。 2. 在swift與OC混編的編譯環境下, oc類不能訪問swift建立類中的代理? 解決方法如下: 在代理的頭部加上 @objc(代理名字),這樣就在外部就可以訪問了,如下圖。 然

swiftOC之間不得不知道的21點

swfit和OC間的 聯絡 1.swift句尾不需要分號 ,除非你想在一行中寫三行程式碼就加分號隔開。  2.swift不要寫main函式 ,程式預設從上往下執行  3.swift不分.h和.m檔案 ,一個類只有.swift一個檔案  4.swift不在有地址的概

swiftOC混編(建立混編工程)

原創文章轉載請註明出處。 背景 Swift語言自推出以來蘋果官方就開始努力開始推這門新語言。就在15年WWDC上更是把Swift進行了開源,瞬間star就開始不斷飆升,截止今天(16年1月25)已經達到26059個star【原始碼請點選這裡】

PMBOK(第4版)--專案管理九知識領域的【輸入】、【工具技術】、【輸出】一覽表

專案管理的九大知識領域 領域 概述 輸入 工具與技術 輸出 專案整合管理 4.1 制定專案章程 1 專案工作說明書 1 專家判斷 1 專案章程 2 商業論證 3 合同 4 事業環境因素 5 組織過程

《演算法筆記》4. 堆堆排序、比較器詳解

[TOC] # 比較器與堆 ## 堆結構 ### 完全二叉樹結構 > 完全二叉樹結構:要麼本層是滿的,要麼先滿左邊的,以下都是完全二叉樹 1. ``` graph TD A-->B A-->C ``` 2. ``` graph TD A-->B A-->C B--&

設計模式—靜態代理模式(聚合繼承方式比較

rri 技術分享 ktr sta too div ide rup 增加 一、概述 1.目標:要在Tank的move()方法做時間代理及日誌代理(可以設想以後還要增加很多代理處理),且代理間的順序可活更換 2.思路: (1)聚合:代理類聚合了被代理類,且代理類及被代理類都實現