秘籍位址
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...