- 屬性的setter和getter, 因為不能用self.了,所以需引入一個中間變量來實現(xiàn)。
/// swift setter getter只能通過一個中間變量來實現(xiàn)。
var _titleStr:String?
var titleStr:String? {
get{
return _titleStr
}
set(newValue){
_titleStr = newValue
}
}
其使用如下:
titleStr = "來啦啊" // set
print(titleStr) // get
- selector使用:需要符號#,方法名在selector后面的括號中, 方法實現(xiàn)前面要加@objc
// 通過selector調(diào)用方法
setRightItemText(itemText: "設(shè)置", action: #selector(toSetting))
// 方法實現(xiàn)前面需要加@objc
@objc func toSetting() -> Void
{
print("設(shè)置")
}
- 對象方法需要func申明開頭,方法中的參數(shù)需要寫在括號中,且是先寫參數(shù)名,再接參數(shù)類型,函數(shù)返回值類型寫在最后
func subText(str:String) -> Void {
text = str
font = UIFont.subTextFont()
textColor = UIColor.subUITextColor()
}
- 如果是類方法則需要加func前面加class
class func grb(r:CGFloat, g:CGFloat, b: CGFloat) ->UIColor{
return UIColor.rgba(r: r, g: g, b: b, a: 1.0)
}
- swift分類寫法,使用extension關(guān)鍵字
// 給UIColor添加一個分類
extension UIColor{
}
- 分類中的如果添加構(gòu)造方法必須是在父類中有這個方法,但是參數(shù)可以不一樣,且該構(gòu)造方法必須使用convenience修飾, 并以self.init明確的去調(diào)用父類方法,而不是super。
convenience init(r:UInt32 ,g:UInt32 , b:UInt32 , a:CGFloat = 1.0) {
self.init(red: CGFloat(r) / 255.0,
green: CGFloat(g) / 255.0,
blue: CGFloat(b) / 255.0,
alpha: a)
}
- 在子類中調(diào)用父類構(gòu)造函數(shù)時,前面需要加上override,并同時加上
required init?(coder aDecoder: NSCoder); 如果只是調(diào)用父類的一般方法,則只需要在方法名前加override。
override init(frame: CGRect) {
super.init(frame: frame)
configUI()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
- 創(chuàng)建子類和OC基本一樣。
import UIKit
class BaseView: UIView {
}
- 代理直接寫在父類的后面, 代理方法實現(xiàn)是直接調(diào)用
// 遵循代理
class ProfileViewController: BaseViewController, UITableViewDelegate, UITableViewDataSource {
}
// 實現(xiàn)代理方法
func numberOfSections(in tableView: UITableView) -> Int {
return 6
}
- 懶加載, 有點類似閉包的寫法,注意最后的()。
lazy var msgArr: Array = {
return [["百萬現(xiàn)金天天領(lǐng)!","","完成任務(wù),抽取大獎"],["","","收藏,移到這里了"],["賣舊手機,馬上收錢","每天一萬步,與健康更親近!","5G流量、限量領(lǐng)"],[""],[""]]
}()
- 枚舉值使用,需要先寫出枚舉值類型。
let weiboBut:UIButton = UIButton.init(type: UIButtonType.custom)
- _的用法,在swift的函數(shù)中參數(shù)名既是函數(shù)內(nèi)部的參數(shù)名,也是外部調(diào)用函數(shù)時的參數(shù)名。 如果給參數(shù)前面加個_,表示調(diào)用時可以忽略參數(shù)名。
// 申明2個函數(shù),第二個函數(shù)的參數(shù)加了 _
func aTest(name:String, password:String) -> Void
{
print(name + password);
}
func haveAtry(name:String, _ password:String) -> Void
{
print(name + password);
}
調(diào)用時可以看到,加了_的參數(shù)名可以省略不寫。

image.png