成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

沒想到Swift里KVC還能有坑

移動開發 iOS
最近看了@南峰子_老驢寫的ViewStyle。利用KVC的來簡化抽取出控件設置style的代碼,想達到一個css的效果。

起因

最近看了@南峰子_老驢寫的ViewStyle。利用KVC的來簡化抽取出控件設置style的代碼,想達到一個css的效果。這個庫用swift編寫,使用起來大概這樣:

class ViewController: UIViewController {



var tableView: UITableView?



override func viewDidLoad() {

super.viewDidLoad()

tableView = UITableView(frame: self.view.bounds)



tableView!.mi_styles = self.tableViewStyle



self.view.addSubview(tableView!)

}

}



// MARK: - Table View Style



extension ViewController {

var tableViewStyle: [Property: Any] {

return [

.rowHeight: 60.0,

.separatorStyle: UITableViewCellSeparatorStyle.singleLine,

.separatorColor: UIColor.lightGray,

.backgroundView: UIView(),

.separatorInset: UIEdgeInsets(top: 10.0, left: 5.0, bottom: 3.0, right: 10.0),

.cellLayoutMarginsFollowReadableWidth: true

]

}

}

閱讀源碼后發現有些屬性在swift是不能直接KVC的,和OC有些區別。

Bool值:isHidden

先來看下正常的在swift中kvc的套路:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))

view.setValue(UIColor.blue, forKey: #keyPath(UIView.backgroundColor))

在swift 3中提供了#keypath()來省去開發者直接輸入字符串的尷尬。

然而,如果這個屬性是isHidden的話運行起來就會報錯。 

 

 

?

控制臺會輸出錯誤:

‘[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key isHidden.’

提示我們沒有isHidden這個屬性。

那為什么我們平時沒有注意到這個問題呢?

view.isHidden = true

這么寫代碼是沒問題的。

其實就是Swift團隊在升級3.0的時候keypath忘記做這個功能了。。。 

 

 

?[[182955]]

你可以安慰自己這個功能在swift 2.0的時候還是好好的。

如果讀者寫過OC這個原因很容易猜到。有些單獨聲明過getter的bool值直接kvc會報錯。比如isHidden這樣:

@property (nonatomic, getter=isHidden) BOOL hidden;

UIView上確實沒有isHidden屬性,那么怎么解決呢?只能回到老路上了:

view.setValue(true, forKey: "Hidden")

Enum

KVC在設置枚舉的時候也會報錯。 

 

 

??

 

錯誤提示的無效的參數類型。

因為setValue的參數類型是Any,所以這里參數可以是任意類型,沒有類型檢查。但是這畢竟是一個OC的方法,所以無法直接使用swift的類型(其實String到NSString也是有轉換的,只是編譯器幫我們做了這層轉換)。

前面直接賦值的時候是正常的,但是調用KVC方法的時候編譯器沒有幫我們轉。所以這里報錯了。

那就只能自己手動轉換了:

view.setValue(UIViewTintAdjustmentMode.automatic.rawValue, forKey: "tintAdjustmentMode")

在OC中的枚舉其實就是對應幾個數值,這里直接取出rawValue的值就可以正常使用了。

***我有一句話想對swift說: 

 

 

責任編輯:龐桂玉 來源: iOS大全
相關推薦

2021-01-27 18:13:35

日志nginx信息

2020-08-14 08:19:25

Shell命令行數據

2023-02-26 00:00:02

字符串分割String

2022-03-21 08:55:53

RocketMQ客戶端過濾機制

2017-12-26 15:41:26

2018-01-26 23:23:23

JDBC MySQL數據庫

2012-12-28 13:47:36

Raspberry PGeek

2022-01-05 17:13:28

監控HTTPS網站

2021-11-29 05:37:24

Windows Def操作系統微軟

2009-04-28 07:48:29

蓋茨打工基金會

2023-10-31 12:29:25

模型訓練

2021-08-12 06:52:02

谷歌面試ArrayList

2019-03-08 10:08:41

網絡程序猿代碼

2023-09-07 06:48:38

Intel顯卡AMD

2018-10-22 15:29:50

2021-02-25 17:58:26

Python 開發編程語言

2022-11-02 07:46:31

GoFrameGcache緩存

2020-12-31 06:12:38

Siri Windows電腦

2023-09-08 06:39:33

NVIDIA顯卡行業

2015-07-15 13:00:31

英特爾開源
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品福利一区二区三区 | 荷兰欧美一级毛片 | 亚洲电影专区 | 一级a爱片久久毛片 | 特黄级国产片 | 亚洲国产午夜 | 亚洲精品乱码久久久久久蜜桃 | 成人在线精品视频 | 91精品国产自产精品男人的天堂 | 久久久久久久电影 | 日韩三级| av免费在线播放 | 成人午夜看片 | 国产精品久久久久久久久久妇女 | 久在线视频 | 成人欧美一区二区三区黑人孕妇 | 亚洲欧美国产一区二区三区 | 国产亚洲一区二区在线观看 | 成人免费黄视频 | 综合久久av| 在线欧美亚洲 | 中文字幕亚洲一区二区三区 | 国产区在线 | 精品国产乱码久久久久久闺蜜 | 国产资源在线视频 | 欧美日韩亚洲国产综合 | 国产一区二区久久 | 黑人精品欧美一区二区蜜桃 | 国产精品伦一区二区三级视频 | 久久国产区 | 在线播放国产一区二区三区 | 在线一区二区三区 | 91社区在线观看 | 久久新 | 色毛片 | 男女视频在线免费观看 | 亚洲成人一级片 | 亚洲精品在线观看网站 | 极品电影院 | 久久99精品久久久久久 | 在线2区 |