學習道長的30個Swift法術 一

2021-08-07 12:34:00 字數 3332 閱讀 8101

秘籍位址

swift的語法中 mark 和 oc 稍有變化

// mark: - tableview set
#pragma mark -
swift型別中的方法名稱 和 ns庫中的也是有區別的, 好在可以方便的做出轉換.

calendar轉為nscalendar型別

// 獲取年齡

let gregorian = calendar(identifier: calendar.identifier.gregorian)

letnow = date()

let components = (gregorian as nscalendar?)?.components(nscalendar.unit.year, from: birthdaypicker.date, to: now, options: )

let age:int! = components?.year

在原有的swift中的 private其實並不是真正的私有,如果乙個變數定義為private,在同乙個檔案中的其他類依然是可以訪問到的。這個場景在使用extension的時候很明顯。

class

user

extension user

}

這樣帶來了兩個問題:

由此,在swift 3中,新增加了乙個 fileprivate來顯式的表明,這個元素的訪問許可權為檔案內私有。過去的private對應現在的fileprivate。現在的private則是真正的私有,離開了這個類或者結構體的作用域外面就無法訪問。

給乙個action設定selector, 可以使用關鍵字#selector(classname.methodname)

timer.scheduledtimer(timeinterval: 0.1,

target: self,

selector: #selector(viewcontroller.updatemaintimer),

userinfo: nil,

repeats: true)

也可以提前用常量定義好, 在進一步的話, 可以給selector新增屬性:

fileprivate extension selector
使用時如下:

timer.scheduledtimer(timeinterval: 0.035,

target: self,

selector: selector.updatemaintimer,

userinfo: nil,

repeats: true)

在類的外面建立乙個array物件, 他就是乙個全域性了陣列了, 再結合swift專案不用import標頭檔案, 就可以直接使用這個全域性的物件了.

var todos: [string] =
swift提供提供了乙個關鍵字為guard, 以讀取bundle為例寫乙個方法

var artists = [artist]()

guard let url = bundle.main.url(forresource: "artists", withextension: "json") else

可以看到 url(forresource: withextension:)方法返回值是乙個可選值.

利用guard作為判斷, 如果讀取失敗, 則直接 return. 來實現防禦式寫法.

如果遇到方法帶有throws, 需要對方法進行捕獲.

public init(contentsof url: url) throws
方法一: 手動捕獲

docatch
方法二: 利用衛式程式設計

try?方式(常用方式) 系統幫助我們處理異常,如果該方法出現了異常,則該方法返回nil.如果沒有異常,則返回對應的物件

guard let anyobject = try? nsjsonserialization.jsonobjectwithdata(jsondata, options: .mutablecontainers) else
func filtercontentforsearchtext(_ searchtext: string, scope: string = "all") 

tableview.reloaddata()

}

此方法第二個引數填寫了預設值, 在呼叫這個方法的時候, 如果只傳遞第乙個引數.第二個引數會使用預設值.

使用array中的方法filter, 過濾得到需要的陣列內的物件.

rxcocoa 和 rxswift 函式式程式設計框架

用元祖封裝簡單的資料結構, 作為整體進行傳遞.

宣告乙個裝有元祖的陣列:

var rssitems: [(title: string, description: string, pubdate: string)]?
給cell賦值:

let cell = tableview.dequeuereusablecell(withidentifier: "cell", for: indexpath) as! newstableviewcell

if let item = rssitems?[indexpath.row]

使用if進行連續解包 , 當遇到為 nil 時不進行後面的解包.

if

let cell = sender as? uicollectionviewcell,

let indexpath = collectionview?.indexpath(for: cell),

let zoomedphotoviewcontroller = segue.destination as? zoomedphotoviewcontroller

**方法的第三個引數是指標傳遞, 通過修改第三個引數, 可以控制scrollview的最終位置.

func scrollviewwillenddragging(_ scrollview: uiscrollview, withvelocity velocity: cgpoint, targetcontentoffset: unsafemutablepointer)

Swift 3 0基礎學習之下標

前言 類,結構體和列舉都可以定義下標,使用下標可以快速訪問集合,列表或者序列的資料成員元素。可以使用somearray index 來訪問array,使用somedictionary key 來訪問dictionary。乙個型別可以定義多個下標。定義乙個get set的下標 subscript in...

學志 swift3 0 類的初學習

老師的作業 列舉可以同時有原始值和關聯值嗎?應該是不可以的 import uikit import foundation enum enum birtherror error person類 class person 建構函式 init?firstname string,lastname strin...

Swift 3 0基礎學習之閉包

前言 閉包是功能性自包含模組,可以在 中被傳遞和使用。swift 中的閉包與 c 和 objective c中的 blocks 以及其他一些程式語言中的 lambdas 比較相似。下面這篇文章就來詳細介紹了關於swift 3.0中的閉包,感興趣的一起來看看吧。開始閉包的書寫格式如下 如reverse...