精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Swift 2.0 下面向協(xié)議的MVVM架構(gòu)實(shí)踐

移動(dòng)開(kāi)發(fā) iOS
自從令人興奮的[《面向協(xié)議的編程方法》]在Swift的WWDC大會(huì)上發(fā)布以來(lái)。我對(duì)協(xié)議的使用考慮了很多。但是在現(xiàn)實(shí)中,我并沒(méi)有太多的顧及和使用這些功能。我還仍舊在消化到底面向協(xié)議的編程方法是什么,在代碼的哪些地方應(yīng)該使用,而不是使用我目前使用的`go-to`編程方法。

自從令人興奮的[《面向協(xié)議的編程方法》]在Swift的WWDC大會(huì)上發(fā)布以來(lái)。我對(duì)協(xié)議的使用考慮了很多。但是在現(xiàn)實(shí)中,我并沒(méi)有太多的顧及和使用這些功能。我還仍舊在消化到底面向協(xié)議的編程方法是什么,在代碼的哪些地方應(yīng)該使用,而不是使用我目前使用的`go-to`編程方法。

 

...所以,當(dāng)我想起來(lái)要在哪里應(yīng)用這些概念性的東西時(shí),我非常激動(dòng),那就是MVVM !我已經(jīng)在之前的博客中使用過(guò)MVVM架構(gòu),如果你想了解更多MVVM相關(guān)知識(shí)請(qǐng)參考[這里]。接下來(lái)我將講解,如何添加面向協(xié)議。

 

我將會(huì)使用一個(gè)簡(jiǎn)單的例子。一個(gè)只有一個(gè)設(shè)置選項(xiàng)的設(shè)置頁(yè)面,把應(yīng)用設(shè)置為Minion模式,當(dāng)然你也可以擴(kuò)展為多個(gè)設(shè)置選項(xiàng)。

[[149011]]

View Cell

一個(gè)極其普通的Cell,它包含一個(gè)Label和一個(gè)開(kāi)關(guān)控件。你也可以在其他地方使用這個(gè)Cell,例如注冊(cè)頁(yè)面添加一個(gè)“記住我”的開(kāi)關(guān)選項(xiàng)。所以,你應(yīng)該保持這個(gè)頁(yè)面通用性。

一個(gè)復(fù)雜的配置

通常,我在cell中使用一個(gè)設(shè)置方法,來(lái)監(jiān)聽(tīng)所有對(duì)應(yīng)用設(shè)置可能的變更,這看起來(lái)是這樣的:

  1. class SwitchWithTextTableViewCell: UITableViewCell { 
  2.  
  3. @IBOutlet private weak var label: UILabel! 
  4. @IBOutlet private weak var switchToggle: UISwitch! 
  5.  
  6. typealias onSwitchToggleHandlerType = (switchOn: Bool) -> Void 
  7. private var onSwitchToggleHandler: onSwitchToggleHandlerType? 
  8.  
  9. override func awakeFromNib() { 
  10. super.awakeFromNib() 
  11.  
  12. func configure(withTitle title: String, 
  13. switchOn: Bool, 
  14. onSwitchToggleHandler: onSwitchToggleHandlerType? = nil) 
  15. label.text = title 
  16. switchToggle.on = switchOn 
  17.  
  18. self.onSwitchToggleHandler = onSwitchToggleHandler 
  19.  
  20. @IBAction func onSwitchToggle(sender: UISwitch) { 
  21. onSwitchToggleHandler?(switchOn: sender.on) 

通過(guò) Swift 的默認(rèn)參數(shù),可以添加其他的設(shè)置選項(xiàng)到這個(gè)設(shè)置方法,而不必改變代碼中的其他地方,使用起來(lái)非常方便。例如,當(dāng)設(shè)計(jì)師說(shuō)開(kāi)關(guān)按鈕的顏色需應(yīng)該各不相同,這時(shí)候我就可以添加一個(gè)默認(rèn)參數(shù)。

  1. func configure(withTitle title: String, 
  2. switchOn: Bool, 
  3. switchColor: UIColor = .purpleColor(), 
  4. onSwitchToggleHandler: onSwitchToggleHandlerType? = nil) 
  5. label.text = title 
  6. switchToggle.on = switchOn 
  7. // color option added! 
  8. switchToggle.onTintColor = switchColor 
  9.  
  10. self.onSwitchToggleHandler = onSwitchToggleHandler 

雖然在這種情況下看起來(lái)并不是什么大問(wèn)題,但是隨著時(shí)間的增加,事實(shí)上這個(gè)方法將會(huì)變得非常冗長(zhǎng)、復(fù)雜!是時(shí)候由面向協(xié)議的編程方法登場(chǎng)了。

面向協(xié)議的編程方法

  1. protocol SwitchWithTextCellProtocol { 
  2. var title: String { get } 
  3. var switchOn: Bool { get } 
  4.  
  5. func onSwitchTogleOn(on: Bool) 
  6.  
  7. class SwitchWithTextTableViewCell: UITableViewCell { 
  8.  
  9. @IBOutlet private weak var label: UILabel! 
  10. @IBOutlet private weak var switchToggle: UISwitch! 
  11.  
  12. private var delegate: SwitchWithTextCellProtocol? 
  13.  
  14. override func awakeFromNib() { 
  15. super.awakeFromNib() 
  16.  
  17. func configure(withDelegate delegate: SwitchWithTextCellProtocol) { 
  18. self.delegate = delegate 
  19.  
  20. label.text = delegate.title 
  21. switchToggle.on = delegate.switchOn 
  22.  
  23. @IBAction func onSwitchToggle(sender: UISwitch) { 
  24. delegate?.onSwitchTogleOn(sender.on) 

當(dāng)設(shè)計(jì)師說(shuō)需要改變開(kāi)關(guān)控件顏色的時(shí)候會(huì)發(fā)生什么?以下代碼可以展現(xiàn)協(xié)議擴(kuò)展的奇妙之處。

 

 

  1. extension SwitchWithTextCellProtocol { 
  2.  
  3. // set the default color here! 
  4. func switchColor() -> UIColor { 
  5. return .purpleColor() 
  6.  
  7. class SwitchWithTextTableViewCell: UITableViewCell { 
  8.  
  9. // truncated, see above 
  10.  
  11. func configure(withDelegate delegate: SwitchWithTextCellProtocol) { 
  12. self.delegate = delegate 
  13.  
  14. label.text = delegate.title 
  15. switchToggle.on = delegate.switchOn 
  16. // color option added! 
  17. switchToggle.onTintColor = delegate.switchColor() 

在以上代碼中協(xié)議的擴(kuò)展實(shí)現(xiàn)了默認(rèn)的switchColor選項(xiàng),所以,任何已經(jīng)實(shí)現(xiàn)了這個(gè)協(xié)議或者并不關(guān)心設(shè)置開(kāi)關(guān)顏色的人,不用關(guān)注這個(gè)擴(kuò)展。只有一個(gè)具有不同顏色的新的開(kāi)關(guān)控件可以實(shí)現(xiàn)。

ViewModel

所以現(xiàn)在剩下的事情將會(huì)非常簡(jiǎn)單。我將會(huì)為MinionMode的設(shè)置cell寫(xiě)一個(gè)ViewModel。

  1. import UIKit 
  2.  
  3. struct MinionModeViewModel: SwitchWithTextCellProtocol { 
  4. var title = "Minion Mode!!!" 
  5. var switchOn = true 
  6.  
  7. func onSwitchTogleOn(on: Bool) { 
  8. if on { 
  9. print("The Minions are here to stay!"
  10. else { 
  11. print("The Minions went out to play!"
  12.  
  13. func switchColor() -> UIColor { 
  14. return .yellowColor() 
  15.  
  16. ViewController 

 

***一步就是在ViewController中設(shè)置cell的時(shí)候?qū)iewModel傳給cell。

  1. import UIKit 
  2.  
  3. class SettingsViewController: UITableViewController { 
  4.  
  5. enum Setting: Int { 
  6. case MinionMode 
  7. // other settings here 
  8.  
  9. override func viewDidLoad() { 
  10. super.viewDidLoad() 
  11.  
  12. // MARK: - Table view data source 
  13.  
  14. override func tableView(tableView: UITableView, 
  15. numberOfRowsInSection section: Int) -> Int 
  16. return 1 
  17.  
  18. override func tableView(tableView: UITableView, 
  19. cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
  20. if let setting = Setting(rawValue: indexPath.row) { 
  21. switch setting { 
  22. case .MinionMode: 
  23. let cell = tableView.dequeueReusableCellWithIdentifier("SwitchWithTextTableViewCell", forIndexPath: indexPath) as! SwitchWithTextTableViewCell 
  24.  
  25. // this is where the magic happens! 
  26. cell.configure(withDelegate: MinionModeViewModel()) 
  27. return cell 
  28.  
  29. return tableView.dequeueReusableCellWithIdentifier("defaultCell", forIndexPath: indexPath) 
  30.  

通過(guò)使用協(xié)議的擴(kuò)展,是面向協(xié)議的編程方法有了很大的意義,并且我在尋找更多的使用場(chǎng)景。以上代碼的全部?jī)?nèi)容放在[github]上。

更新:將數(shù)據(jù)源和代理分開(kāi)

在評(píng)論中,Marc Baldwin 建議分開(kāi)cell的數(shù)據(jù)源和代理方法到兩個(gè)協(xié)議中,就像UITableView中的那樣。我很贊成這個(gè)意見(jiàn),以下是我修改后的代碼。

View Cell

Cell將擁有兩個(gè)協(xié)議,并且任何一個(gè)協(xié)議都可以設(shè)置這個(gè)cell。

  1. import UIKit 
  2.  
  3. protocol SwitchWithTextCellDataSource { 
  4. var title: String { get } 
  5. var switchOn: Bool { get } 
  6.  
  7. protocol SwitchWithTextCellDelegate { 
  8. func onSwitchTogleOn(on: Bool) 
  9.  
  10. var switchColor: UIColor { get } 
  11. var textColor: UIColor { get } 
  12. var font: UIFont { get } 
  13.  
  14. extension SwitchWithTextCellDelegate { 
  15.  
  16. var switchColor: UIColor { 
  17. return .purpleColor() 
  18.  
  19. var textColor: UIColor { 
  20. return .blackColor() 
  21.  
  22. var font: UIFont { 
  23. return .systemFontOfSize(17
  24.  
  25. class SwitchWithTextTableViewCell: UITableViewCell { 
  26.  
  27. @IBOutlet private weak var label: UILabel! 
  28. @IBOutlet private weak var switchToggle: UISwitch! 
  29.  
  30. private var dataSource: SwitchWithTextCellDataSource? 
  31. private var delegate: SwitchWithTextCellDelegate? 
  32.  
  33. override func awakeFromNib() { 
  34. super.awakeFromNib() 
  35.  
  36. func configure(withDataSource dataSource: SwitchWithTextCellDataSource, delegate: SwitchWithTextCellDelegate?) { 
  37. self.dataSource = dataSource 
  38. self.delegate = delegate 
  39.  
  40. label.text = dataSource.title 
  41. switchToggle.on = dataSource.switchOn 
  42. // color option added! 
  43. switchToggle.onTintColor = delegate?.switchColor 
  44.  
  45. @IBAction func onSwitchToggle(sender: UISwitch) { 
  46. delegate?.onSwitchTogleOn(sender.on) 

ViewModel

你現(xiàn)在可以在擴(kuò)展里把數(shù)據(jù)源和delegate邏輯分開(kāi)了:

  1. import UIKit 
  2.  
  3. struct MinionModeViewModel: SwitchWithTextCellDataSource { 
  4. var title = "Minion Mode!!!" 
  5. var switchOn = true 
  6.  
  7. extension MinionModeViewModel: SwitchWithTextCellDelegate { 
  8.  
  9. func onSwitchTogleOn(on: Bool) { 
  10. if on { 
  11. print("The Minions are here to stay!"
  12. else { 
  13. print("The Minions went out to play!"
  14.  
  15. var switchColor: UIColor { 
  16. return .yellowColor() 

ViewController

這一部分是我不十分確定,ViewController不能傳遞ViewModel兩次:

 

 

 

  1. override func tableView(tableView: UITableView, 
  2. cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
  3. if let setting = Setting(rawValue: indexPath.row) { 
  4. switch setting { 
  5. case .MinionMode: 
  6. let cell = tableView.dequeueReusableCellWithIdentifier("SwitchWithTextTableViewCell", forIndexPath: indexPath) as! SwitchWithTextTableViewCell 
  7.  
  8. // this is where the magic happens! 
  9. let viewModel = MinionModeViewModel() 
  10. cell.configure(withDataSource: viewModel, delegate: viewModel) 
  11. return cell 
  12.  
  13. return tableView.dequeueReusableCellWithIdentifier("defaultCell", forIndexPath: indexPath) 

代碼已經(jīng)上傳[GitHub]

責(zé)任編輯:chenqingxiang 來(lái)源: CocoaChina
相關(guān)推薦

2015-08-04 08:56:14

swift子類

2018-05-10 13:45:15

Swift網(wǎng)絡(luò)層協(xié)議

2018-07-23 15:55:28

協(xié)議自定義viewSwift

2022-04-29 13:43:00

谷歌SWIFT參考架構(gòu)

2022-07-30 23:41:53

面向過(guò)程面向?qū)ο?/a>面向協(xié)議編程

2015-08-14 11:37:37

Swift語(yǔ)言中文版

2010-07-09 11:12:09

UDP協(xié)議

2021-08-02 06:49:46

OIDC認(rèn)證協(xié)議

2019-02-21 08:30:00

邊緣計(jì)算物聯(lián)網(wǎng)5G

2015-01-29 09:52:43

Swift 開(kāi)源蘋(píng)果

2010-07-28 09:18:03

Flex2.0

2015-06-23 15:48:41

Swift 2.0iOS9

2016-12-12 15:22:41

編程

2024-04-28 10:22:08

.NETMVVM應(yīng)用工具包

2009-07-24 13:54:39

MVVM模式

2017-07-17 15:19:10

MVVM模式iOS開(kāi)發(fā)MVP

2021-06-04 09:01:27

Cocoa 協(xié)議編程 Swift

2018-05-23 16:20:30

IoT協(xié)議思考

2021-06-03 08:55:58

面向協(xié)議編程

2020-07-29 11:02:35

物聯(lián)網(wǎng)安全技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日产精品久久久一区二区福利| 亚洲精品久久久久久久久| 91免费网站视频| 风流少妇一区二区三区91| 国产欧美日本| www亚洲精品| 一级黄色片毛片| 成人交换视频| 亚洲aaa精品| 一本一道久久a久久综合精品| 精品国产999久久久免费| 久久99伊人| 欧美乱大交做爰xxxⅹ性3| 毛茸茸多毛bbb毛多视频| 国产一区二区| 欧美在线影院一区二区| 人妻少妇精品无码专区二区| 69久久精品| 91麻豆国产精品久久| 91免费观看网站| 日韩av在线天堂| 久久久久久免费视频| 亚洲精品在线一区二区| 久久久久久久久久久久久久久国产| www中文字幕在线观看| 国产精品乱码久久久久久| 免费成人深夜夜行视频| 后入内射欧美99二区视频| 精品一区二区在线免费观看| 欧美一级黑人aaaaaaa做受| 国产乱国产乱老熟300| 久久五月天小说| 亚洲性夜色噜噜噜7777| 精品人妻一区二区三区香蕉| 久久365资源| 精品人在线二区三区| 免费av不卡在线| 国产精品亚洲d| 欧美日韩在线视频一区| 国产3p露脸普通话对白| 成人女同在线观看| 亚洲午夜久久久久中文字幕久| 最新中文字幕久久| 黄色成人在线观看| 中文字幕综合网| 在线视频不卡一区二区| 日本在线观看网站| 国产精品久久久久一区二区三区 | 亚洲视频在线a| 成人av三级| 欧美日韩中国免费专区在线看| 国产深夜男女无套内射| 草美女在线观看| 亚洲a一区二区| 欧美 日韩 国产 高清| 丁香花在线观看完整版电影| 亚洲国产aⅴ天堂久久| 日韩精品在线视频免费观看| 国产在线xxx| 亚洲国产成人av| 国产精品无码人妻一区二区在线| wwww亚洲| 色欲综合视频天天天| 精品久久久久久中文字幕2017| 91天天综合| 欧美精品色综合| 国产精品探花在线播放| 日韩一区免费| 日韩av在线一区| 丝袜美腿中文字幕| 国产亚洲欧美日韩在线观看一区二区 | 人妻丰满熟妇av无码区hd| 粉嫩av亚洲一区二区图片| 极品校花啪啪激情久久| 欧美日韩在线中文字幕| 欧美激情一区二区在线| 中文字幕精品一区日韩| 伊人手机在线| 福利二区91精品bt7086| 免费日韩中文字幕| 日韩大陆av| 精品少妇一区二区三区日产乱码 | 污污网站免费看| 激情综合五月| 日韩精品视频在线免费观看| 粉嫩精品久久99综合一区| 亚洲成人三区| 69av在线播放| 国产一区二区在线不卡| 波多野结衣91| 在线观看成人一级片| av3级在线| 欧美日韩大陆一区二区| 2025中文字幕| 成人激情在线| 久久频这里精品99香蕉| 国产91av在线播放| 亚洲美女综合网| 欧美午夜在线| 国产精品第三页| 精品人妻一区二区三区蜜桃| 久久精品人人做人人综合| 欧美少妇一级片| 日韩精品av| 91精品国产色综合久久不卡蜜臀 | 天天干天天玩天天操| 亚洲国产中文在线| 在线精品播放av| 日韩精品成人在线| 国产九九视频一区二区三区| 欧美性色黄大片人与善| 黄页网站大全在线免费观看| 欧美性猛交xxxxxx富婆| 成熟妇人a片免费看网站| 日韩高清欧美| 日本亚洲欧美成人| 亚洲国产精品一| 国产精品久久精品日日| 国产91美女视频| 中文无码日韩欧| 久久精品99国产精品酒店日本| 色一情一乱一伦| 9l国产精品久久久久麻豆| 午夜探花在线观看| 欧美videos粗暴| 日韩久久精品电影| 欧美日韩国产精品一区二区三区| 美女在线视频一区| 欧美一区二区影视| 天堂电影一区| 亚洲高清久久网| 久久久无码精品亚洲国产| 精品一区二区三区影院在线午夜| 欧美日韩中文国产一区发布| 超碰在线cao| 精品少妇一区二区三区日产乱码| 91人妻一区二区三区蜜臀| 欧美aaaaaa午夜精品| 天堂社区 天堂综合网 天堂资源最新版| aa视频在线观看| 欧美成人video| 久操免费在线视频| 国产成人午夜99999| 7777在线视频| 国产区一区二| 久久亚洲精品中文字幕冲田杏梨| 亚洲在线免费观看视频| 国产精品天美传媒| 奇米影视四色在线| 午夜激情久久| 91香蕉亚洲精品| 午夜伦理大片视频在线观看| 日韩一区二区三区视频在线观看| 我家有个日本女人| 成人白浆超碰人人人人| 国产3p露脸普通话对白| 欧洲亚洲视频| 国产精品黄色av| aaa在线观看| 51精品久久久久久久蜜臀| 国产探花在线免费观看| 国产一区二区三区黄视频| 91嫩草国产丨精品入口麻豆 | 久久天堂国产精品| 日韩精品三区| 日韩亚洲第一页| a级片免费视频| 一区二区激情小说| 91玉足脚交白嫩脚丫| 国产精品毛片一区二区三区| 欧美自拍资源在线| 亚洲狼人综合| 久久久在线视频| 国产在线资源| 91麻豆精品国产91久久久使用方法 | 成人免费视频网址| 黄网av在线| 亚洲欧美国产一本综合首页| 亚洲天堂视频在线| 亚洲在线观看免费| 国产黄色网址在线观看| 久久精品久久综合| 黄色激情在线视频| 欧美综合在线视频观看| 99久久精品久久久久久ai换脸| 毛片在线网站| 久久av在线看| 日本福利片高清在线观看| 911精品国产一区二区在线| 日产欧产va高清| 中文字幕中文字幕一区二区| 国产在线不卡av| 麻豆成人久久精品二区三区小说| 4444亚洲人成无码网在线观看| 欧美激情在线精品一区二区三区| 国产深夜精品福利| 无码小电影在线观看网站免费| 日韩在线精品视频| 天天射,天天干| 欧美一区二区三区人| 69视频免费在线观看| 亚洲欧美色一区| 亚洲天堂岛国片| 不卡在线观看av| 日本中文字幕观看| 性一交一乱一区二区洋洋av| 日韩精品一区二区三区电影| 菠萝蜜一区二区| 精品欧美国产| 亚洲一二三区视频| 成人免费激情视频| av免费在线一区| 8050国产精品久久久久久| 黄色片免费在线观看| 尤物九九久久国产精品的分类| 蜜桃91麻豆精品一二三区 | 亚洲av少妇一区二区在线观看| 在线精品视频免费观看| 91看片在线播放| 亚洲精品日产精品乱码不卡| 日韩免费成人av| 91免费视频网| 这里只有精品在线观看视频 | 亚洲自拍偷拍一区二区| 成人综合婷婷国产精品久久免费| 亚洲欧美手机在线| 麻豆精品一二三| 亚洲成色www.777999| 免费一区视频| 亚洲欧洲日产国码无码久久99| 激情综合网址| 久久av综合网| 狠狠爱www人成狠狠爱综合网| 国产树林野战在线播放| 99国产精品一区二区| 亚洲在线观看一区| 日韩在线看片| 日韩免费av一区二区三区| 亚洲精品**不卡在线播he| 国产欧美一区二区视频| 福利欧美精品在线| 国产精品一区在线播放| 黄色美女久久久| 国产中文一区二区| 青草久久视频| 欧美日韩另类综合| 色棕色天天综合网| 五月天色一区| 日韩欧美高清在线播放| 亚洲一区三区视频在线观看 | 99久久国产综合精品五月天喷水| 国内综合精品午夜久久资源| 免费人成在线观看视频播放| 黄色精品一区| 国产成人a亚洲精v品无码| 欧美亚洲一区二区三区| 黄色av免费在线播放| 琪琪一区二区三区| 最新天堂中文在线| 国产美女在线观看一区| 韩国三级视频在线观看| 91亚洲午夜精品久久久久久| 亚欧洲乱码视频| 国产精品视频yy9299一区| 97精品在线播放| 亚洲激情欧美激情| 日韩女同强女同hd| 色欧美88888久久久久久影院| 亚洲国产无线乱码在线观看| 在线播放亚洲一区| 天天躁日日躁狠狠躁喷水| 亚洲欧美日韩精品久久亚洲区 | 性欧美暴力猛交69hd| 中文字幕21页在线看| 国产精品香蕉在线观看| 国产精品美女久久久久| 好吊色欧美一区二区三区四区| 日韩欧美黄色| 黄色一级片网址| 亚洲黄色影片| 中文字幕天天干| 国产成人欧美日韩在线电影| 一区二区三区免费在线观看视频 | 最新黄色av网站| a91a精品视频在线观看| 制服丝袜综合网| 成人激情校园春色| 国产白丝一区二区三区| 亚洲影院理伦片| 五月激情丁香网| 精品日本一线二线三线不卡| 国产www.大片在线| 欧美富婆性猛交| 色天使综合视频| 高清视频在线观看一区| 奇米色欧美一区二区三区| 久草免费福利在线| 麻豆精品一区二区| 亚洲第一香蕉网| 亚洲一区在线电影| 在线播放一级片| 亚洲国产精品一区二区三区| 免费看美女视频在线网站| 97视频在线观看免费| 国产精品毛片无码| 亚洲成色www久久网站| av成人激情| 久久久久久久久久久影视| 国产日韩欧美综合一区| 自拍偷拍欧美亚洲| 欧美tickling网站挠脚心| 黄色一级大片在线免费看产| 国产精品第1页| 日韩精品免费一区二区夜夜嗨| 8x8x华人在线| 国产真实乱子伦精品视频| 女~淫辱の触手3d动漫| 亚洲国产综合人成综合网站| 国产乱码一区二区| 日韩中文字幕网| 国产极品嫩模在线观看91精品| 久久一区二区精品| 亚洲二区在线| 在线观看一区二区三区四区| 中文字幕亚洲一区二区av在线| 国产精品熟女视频| 亚洲欧美变态国产另类| 蜜臀久久精品| 精品国产一区二区三区麻豆小说| 欧美福利专区| 能看毛片的网站| 亚洲丝袜精品丝袜在线| 亚洲一级黄色大片| 尤物九九久久国产精品的分类| 亚洲伦理影院| 欧美日韩综合精品| 日精品一区二区| 亚洲精品午夜视频| 91福利资源站| 番号集在线观看| 国产精品久久网| 日韩欧美高清| 午夜福利123| 亚洲精品成人悠悠色影视| 97人妻精品一区二区三区软件| 色婷婷综合成人| 9999精品| 中文字幕の友人北条麻妃| 国产成人免费av在线| 国产一国产二国产三| 精品999久久久| 忘忧草在线影院两性视频| 欧美高清性xxxxhd| 日韩电影免费一区| 黑人狂躁日本娇小| 欧美一区二区三区在线观看| 婷婷色在线播放| 国产精品一区二区三区精品| 国产精品美女久久久浪潮软件| 欧美 日韩 国产 成人 在线观看| 欧美性色欧美a在线播放| 日本a在线播放| 999视频在线观看| 国产欧美日本| 日韩女同一区二区三区| 777午夜精品视频在线播放| 色呦呦在线观看视频| 国产在线欧美日韩| 日韩电影在线免费观看| 午夜国产小视频| 亚洲第一网站男人都懂| 三上悠亚激情av一区二区三区| 亚洲一区二区在线看| 国产91丝袜在线播放九色| 黄色在线视频网址| 久久精品91久久香蕉加勒比| 高潮按摩久久久久久av免费| 成人一区二区三| 亚洲免费观看高清在线观看| 神马午夜在线观看| 国产精品久久久久av免费| 综合av在线| jizz欧美性20| 91精品国产欧美一区二区18| jizz一区二区三区| 欧美日韩综合精品| 国产精品一级黄| 黄色片视频免费| 欧美乱大交xxxxx| 激情五月综合| 亚洲免费观看在线| 欧美视频在线一区二区三区| 国产91足控脚交在线观看| 色狠狠久久av五月综合|| 国产.欧美.日韩| 中文字幕在线播放不卡| 91国在线精品国内播放| 天天揉久久久久亚洲精品| 日本丰满少妇裸体自慰| 91麻豆精品国产91久久久久久久久|