亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

Swift教程之類與結(jié)構(gòu)詳解

2020-03-09 17:51:12
字體:
供稿:網(wǎng)友
這篇文章主要介紹了Swift教程之類與結(jié)構(gòu)詳解,本文講解了類和結(jié)構(gòu)的異同、結(jié)構(gòu)和枚舉類型是數(shù)值類型、類是引用類型、如何選擇使用類還是結(jié)構(gòu)、集合類型的賦值和復(fù)制操作等內(nèi)容,需要的朋友可以參考下
 

類與結(jié)構(gòu)是編程人員在代碼中會經(jīng)常用到的代碼塊。在類與結(jié)構(gòu)中可以像定義常量,變量和函數(shù)一樣,定義相關(guān)的屬性和方法以此來實現(xiàn)各種功能。

和其它的編程語言不太相同的是,Swift不需要單獨創(chuàng)建接口或者實現(xiàn)文件來使用類或者結(jié)構(gòu)。Swift中的類或者結(jié)構(gòu)可以在單文件中直接定義,一旦定義完成后,就能夠被直接其它代碼使用。

注意:一個類的實例一般被視作一個對象,但是在Swift中,類與結(jié)構(gòu)更像是一個函數(shù)方法,在后續(xù)的章節(jié)中更多地是講述類和結(jié)構(gòu)的功能性。

1、類和結(jié)構(gòu)的異同

類和結(jié)構(gòu)有一些相似的地方,它們都可以:

定義一些可以賦值的屬性;

定義具有功能性的方法

定義下標(biāo),使用下標(biāo)語法

定義初始化方法來設(shè)置初始狀態(tài)

在原實現(xiàn)方法上的可擴(kuò)展性

根據(jù)協(xié)議提供某一特定類別的基本功能

更多內(nèi)容可以閱讀:屬性,方法,下標(biāo),初始化,擴(kuò)展和協(xié)議等章節(jié)

類還有一些結(jié)構(gòu)不具備的特性:

類的繼承性

對類實例實時的類型轉(zhuǎn)換

析構(gòu)一個類的實例使之釋放空間

引用計數(shù),一個類實例可以有多個引用

更多內(nèi)容可以閱讀:繼承,類型轉(zhuǎn)換,初始化自動引用計數(shù)

注意:結(jié)構(gòu)每次在代碼中傳遞時都是復(fù)制了一整個,所以不要使用引用計數(shù)

定義語法

類和結(jié)構(gòu)擁有相似的定義語法,使用class關(guān)鍵詞定義一個類,struct關(guān)鍵詞定義結(jié)構(gòu)。每個定義都由一對大括號包含:

 

復(fù)制代碼代碼如下:
 
class SomeClass {
// class definition goes here
}
struct SomeStructure {
// structure definition goes here
}

注意:在定義類和結(jié)構(gòu)時,一般使用UpperCamelCase命名法來定義類和結(jié)構(gòu)的名稱,比如SomeClass和SomeStructure,這樣也符合Swift其它類型的標(biāo)準(zhǔn)。而給屬性和方法命名時,一般時候lowerCamelCase命名法,比如frameRate和incrementCount等。
下面是一個結(jié)構(gòu)和一個類的定義示例:

 

 

復(fù)制代碼代碼如下:
 
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution()
var interlaced = falsevar
frameRate = 0.0
var name: String?
}

上面的例子首先定義了一個叫Resolution的結(jié)構(gòu),用來描述一個像素顯示的分辨率,它有兩個屬性分別叫width和height。這兩個屬性被默認(rèn)定義為Int類型,初始化為0.

 

之后定義了一個叫VideoMode的類,為視頻顯示的顯示方式。這個類有四個屬性,第一個屬性resolution本身又是一個結(jié)構(gòu),然后是另外兩個屬性。最后一個屬性用到了可選字符串類型String?,表示這個屬性可以存在,或者不存在為nil。

類和結(jié)構(gòu)的實例

上面的兩個定義僅僅是定義了結(jié)構(gòu)Resolution和類VideoMode的整體樣式,它們本身不是一個特定的分辨率或者顯示方式,這時候就需要實例化這個結(jié)構(gòu)和類。

實例化的語法相似:

 

復(fù)制代碼代碼如下:

let someResolution = Resolution()
let someVideoMode = VideoMode()

 

類和結(jié)構(gòu)都使用實例語法來完成實例化。最簡單的實例語法就是用兩個括號()完成。在這種情況下定義的實例中的屬性都會完成默認(rèn)初始化。更多內(nèi)容可以參考初始化一章。

訪問屬性

使用.語法就可以方便地訪問一個實例的屬性。在.語法中,在實例名之后加上(.)再加上屬性名即可,不需要空格:

 

復(fù)制代碼代碼如下:

println("The width of someResolution is /(someResolution.width)")
// prints "The width of someResolution is 0"

在這個例子中,someResolution.width表示someResolution的width屬性,返回了它的初始值0

 

也可以使用.語法連續(xù)地獲取屬性的屬性,比如VideoMode中resolution屬性的width屬性

 

復(fù)制代碼代碼如下:
 
println("The width of someVideoMode is /(someVideoMode.resolution.width)")
// prints "The width of someVideoMode is 0"

 

使用這種方法不僅可以訪問,也可以賦值:

 

復(fù)制代碼代碼如下:
 
someVideoMode.resolution.width = 1280
println("The width of someVideoMode is now /(someVideoMode.resolution.width)")
// prints "The width of someVideoMode is now 1280"

注意:和Objective-C不同,Swift能夠直接設(shè)置一個結(jié)構(gòu)屬性的子屬性,就像上面這個例子一樣。

 

結(jié)構(gòu)類型的成員初始化方法

每個結(jié)構(gòu)都有一個成員初始化方法,可以在初始化的時候通過使用屬性名稱來指定每一個屬性的初始值:

 

復(fù)制代碼代碼如下:
 
let vga = Resolution(width: 640, height: 480)

 

但是和結(jié)構(gòu)不同,類實例不能夠使用成員初始化方法,在初始化一章有專門的介紹。

2、結(jié)構(gòu)和枚舉類型是數(shù)值類型

數(shù)值類型是說當(dāng)它被賦值給一個常量或者變量,或者作為參數(shù)傳遞給函數(shù)時,是完整地復(fù)制了一個新的數(shù)值,而不是僅僅改變了引用對象。

事實上讀到這里你已經(jīng)在前面幾章見過數(shù)值類型了,所有Swift中的基礎(chǔ)類型-整型,浮點型,布爾類型,字符串,數(shù)組和字典都是數(shù)值類型。它們也都是由結(jié)構(gòu)來實現(xiàn)的。

在Swift中所有的結(jié)構(gòu)和枚舉類型都是數(shù)值類型。這意味這你實例化的每個結(jié)構(gòu)和枚舉,其包含的所有屬性,都會在代碼中傳遞的時候被完整復(fù)制。

下面的這個例子可以說明這個特性:

 

復(fù)制代碼代碼如下:
 
let hd = Resolution(width: 1920, height: 1080)
var cinema = hd

 

聲明了一個常量hd,是Resolution的實例化,寬度是1920,高度是1080,然后聲明了一個變量cinema,和hd相同。這個時候表明,cinema和hd是兩個實例,雖然他們的寬度都是1920,高度都是1080。

如果把cinema的寬度更改為2048,hd的寬度不會變化,依然是1920

 

復(fù)制代碼代碼如下:
 
cinema.width = 2048
println("cinema is now /(cinema.width) pixels wide")
// prints "cinema is now 2048 pixels wide"
println("hd is still /(hd.width) pixels wide")
// prints "hd is still 1920 pixels wide"

這表明當(dāng)hd被賦值給cinema時,是完整地復(fù)制了一個全新的Resolution結(jié)構(gòu)給cinema,所以當(dāng)cinema的屬性被修改時,hd的屬性不會變化。

 

下面的例子演示的是枚舉類型:

 

復(fù)制代碼代碼如下:

enum CompassPoint {
case North, South, East, West
}
var currentDirection = CompassPoint.West
let rememberedDirection = currentDirection
currentDirection = .East
if rememberedDirection == .West {
println("The remembered direction is still .West")
}
// prints "The remembered direction is still .West"

 

盡管經(jīng)過幾次賦值,rememberedDirection依然沒有變化,這是因為在每一次賦值過程中,都是將數(shù)值類型完整地復(fù)制了過來。

3、類是引用類型

和數(shù)值類型不同引用類型不會復(fù)制整個實例,當(dāng)它被賦值給另外一個常量或者變量的時候,而是會建立一個和已有的實例相關(guān)的引用來表示它。

下面是引用的示例,VideoMode被定義為一個類:

 

復(fù)制代碼代碼如下:
 
let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0

分別將這個實例tenEighty的四個屬性初始化,然后tenEighty被賦值給了另外一個叫alsoTenEighty的常量,然后alsoTenEighty的frameRate被修改了

 

 

復(fù)制代碼代碼如下:

let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0

由于類是一個引用類型,所以tenEighty和alsoTenEighty實際上是同一個實例,僅僅只是使用了不同的名稱而已,我們通過檢查frameRate可以證明這個問題:

 

 

復(fù)制代碼代碼如下:
 
println("The frameRate property of tenEighty is now /(tenEighty.frameRate)")
// prints "The frameRate property of tenEighty is now 30.0"

 

注意到tenEighty和alsoTenEighty是被定義為常量的,而不是變量。但是我們還是可以改變他們的屬性值,這是因為它們本身實際上沒有改變,它們并沒有保存這個VideoMode的實例,僅僅只是引用了一個VideoMode實例,而我們修改的也是它們引用的實例中的屬性。

特征操作

因為類是引用類型,那么就可能存在多個常量或者變量只想同一個類的實例(這對于數(shù)值類型的結(jié)構(gòu)和枚舉是不成立的)。

可以通過如下兩個操作來判斷兩個常量或者變量是否引用的是同一個類的實例:

相同的實例(===)

不同的實例(!==)

使用這些操作可以檢查:

 

復(fù)制代碼代碼如下:
 
if tenEighty === alsoTenEighty {
println("tenEighty and alsoTenEighty refer to the same Resolution instance.")
}
// prints "tenEighty and alsoTenEighty refer to the same Resolution instance."

注意是相同的實例判斷使用三個連續(xù)的等號,這和相等(兩個等號)是不同的

 

實例相同表示的是兩個變量或者常量所引用的是同一個類的實例

相等是指兩個實例在數(shù)值上的相等,或者相同。

當(dāng)你定義一個類的時候,就需要說明什么樣的時候是兩個類相等,什么時候是兩個類不相等。更多內(nèi)容可以從相等操作一章中獲得。

指針

如果你有C,C++或者Objective-C的編程經(jīng)驗,你一定知道在這些語言中使用指針來引用一個內(nèi)存地址。Swift中引用一個實例的常量或變量跟C中的指針類似,但是不是一個直接指向內(nèi)存地址的指針,也不需要使用*記號表示你正在定義一個引用。Swift中引用和其它變量,常量的定義方法相同。

4、如何選擇使用類還是結(jié)構(gòu)

在代碼中可以選擇類或者結(jié)構(gòu)來實現(xiàn)你所需要的代碼塊,完成相應(yīng)的功能。但是結(jié)構(gòu)實例傳遞的是值,而類實例傳遞的是引用。那么對于不同的任務(wù),應(yīng)該考慮到數(shù)據(jù)結(jié)構(gòu)和功能的需求不同,從而選擇不同的實例。

一般來說,下面的一個或多個條件滿足時,應(yīng)當(dāng)選擇創(chuàng)建一個結(jié)構(gòu):

結(jié)構(gòu)主要是用來封裝一些簡單的數(shù)據(jù)值

當(dāng)賦值或者傳遞的時候更希望這些封裝的數(shù)據(jù)被賦值,而不是被引用過去

所有被結(jié)構(gòu)存儲的屬性本身也是數(shù)值類型

結(jié)構(gòu)不需要被另外一個類型繼承或者完成其它行為

一些比較好的使用結(jié)構(gòu)的例子:

一個幾何形狀的尺寸,可能包括寬度,高度或者其它屬性,每個屬性都是Double類型的

一個序列的對應(yīng)關(guān)系,可能包括開始start和長度length屬性,每個屬性都是Int類型的

3D坐標(biāo)系中的一個點,包括x,y和z坐標(biāo),都是Double類型

在其它情況下,類會是更好的選擇。也就是說一般情況下,自定義的一些數(shù)據(jù)結(jié)構(gòu)一般都會被定義為類。

5、集合類型的賦值和復(fù)制操作

Swift中,數(shù)組Array和字典Dictionary是用結(jié)構(gòu)來實現(xiàn)的,但是數(shù)組與字典和其它結(jié)構(gòu)在進(jìn)行賦值或者作為參數(shù)傳遞給函數(shù)的時候有一些不同。

并且數(shù)組和字典的這些操作,又與Foundation中的NSArray和NSDictionary不同,它們是用類來實現(xiàn)的。

注意:下面的小節(jié)將會介紹數(shù)組,字典,字符串等的復(fù)制操作。這些復(fù)制操作看起來都已經(jīng)發(fā)生,但是Swift只會在確實需要復(fù)制的時候才會完整復(fù)制,從而達(dá)到最優(yōu)的性能。

字典的賦值和復(fù)制操作

每次將一個字典Dictionary類型賦值給一個常量或者變量,或者作為參數(shù)傳遞給函數(shù)時,字典會在賦值或者函數(shù)調(diào)用時才會被復(fù)制。這個過程在上面的小節(jié):結(jié)構(gòu)和枚舉是數(shù)值類型中描述了。

如果字典中的鍵值是數(shù)值類型(結(jié)構(gòu)或者枚舉),它們在賦值的時候會同時被復(fù)制。相反,如果是引用類型(類或者函數(shù)),引用本身將會被復(fù)制,而不是類實例或者函數(shù)本身。字典的這種復(fù)制方式和結(jié)構(gòu)相同。

下面的例子演示的是一個叫ages的字典,存儲了一些人名和年齡的對應(yīng)關(guān)系,當(dāng)賦值給copiedAges的時候,里面的數(shù)值同時被完整復(fù)制。當(dāng)改變復(fù)制了的數(shù)值的時候,原有的數(shù)值不會變化,如下例子:

 

復(fù)制代碼代碼如下:
 
var ages = ["Peter": 23, "Wei": 35, "Anish": 65, "Katya": 19]
var copiedAges = ages

這個字典的鍵是字符串String類型,值是Int類型,都是數(shù)值類型,那么在賦值的時候都會被完整復(fù)制。

 

 

復(fù)制代碼代碼如下:

copiedAges["Peter"] = 24
println(ages["Peter"])
// prints "23"

 

數(shù)組的賦值和復(fù)制操作

和字典Dictionary類型比起來,數(shù)組Array的賦值和復(fù)制操作就更加復(fù)雜。Array類型和C語言中的類似,僅僅只會在需要的時候才會完整復(fù)制數(shù)組的值。

如果將一個數(shù)組賦值給一個常量或者變量,或者作為一個參數(shù)傳遞給函數(shù),復(fù)制在賦值和函數(shù)調(diào)用的時候并不會發(fā)生。這兩個數(shù)組將會共享一個元素序列,如果你修改了其中一個,另外一個也將會改變。

對于數(shù)組來說,復(fù)制只會在你進(jìn)行了一個可能會修改數(shù)組長度操作時才會發(fā)生。包括拼接,添加或者移除元素等等。當(dāng)復(fù)制實際發(fā)生的時候,才會像字典的賦值和復(fù)制操作一樣。

下面的例子演示了數(shù)組的賦值操作:

 

復(fù)制代碼代碼如下:
 
var a = [1, 2, 3]
var b = a
var c = a

 

數(shù)組a被賦值給了b和c,然后輸出相同的下標(biāo)會發(fā)現(xiàn):

 

復(fù)制代碼代碼如下:
 
println(a[0])
// 1
println(b[0])
// 1
println(c[0])
// 1

 

如果改變a中的某個值,會發(fā)現(xiàn)b和c中的數(shù)值也會跟著改變,因為賦值操作沒有改變數(shù)組的長度:

 

復(fù)制代碼代碼如下:
 
a[0] = 42
println(a[0])
// 42
println(b[0])
// 42
println(c[0])
// 42

但是,如果在a中添加一個新的元素,那么就改變了數(shù)組的長度,這個時候就會發(fā)生實際的復(fù)制操作。如果再改變a中元素的值,b和c中的元素將不會發(fā)生改變:

 

 

復(fù)制代碼代碼如下:

a.append(4)
a[0] = 777
println(a[0])
// 777
println(b[0])
// 42
println(c[0])
// 42

設(shè)置數(shù)組是唯一的

 

如果可以在對數(shù)組進(jìn)行修改前,將它設(shè)置為唯一的就最好了。我們可以通過使用unshare方法來將數(shù)組自行拷貝出來,成為一個唯一的實體。

如果多個變量引用了同一個數(shù)組,可以使用unshare方法來完成一次“獨立”

復(fù)制代碼代碼如下:

b.unshare()

這時候如果再修改b的值,c的值也不會再受影響

 

 

復(fù)制代碼代碼如下:
 
b[0] = -105
println(a[0])
// 777
println(b[0])
// -105
println(c[0])
// 42

檢查兩個數(shù)組時候共用了相同的元素

 

使用實例相等操作符來判斷兩個數(shù)組是否共用了元素(===和!===)

下面這個例子演示的就是判斷是否共用元素:

 

復(fù)制代碼代碼如下:
 
if b === c {
println("b and c still share the same array elements.")
} else {
println("b and c now refer to two independent sets of array elements.")
}
// prints "b and c now refer to two independent sets of array elements."

也可以使用這個操作來判斷兩個子數(shù)組是否有共用的元素:

 

 

復(fù)制代碼代碼如下:
 
if b[0...1] === b[0...1] {
println("These two subarrays share the same elements.")
} else {
println("These two subarrays do not share the same elements.")
}
// prints "These two subarrays share the same elements."

強制數(shù)組拷貝

 

通過調(diào)用數(shù)組的copy方法來完成強制拷貝。這個方法將會完整復(fù)制一個數(shù)組到新的數(shù)組中。

下面的例子中這個叫names的數(shù)組會被完整拷貝到copiedNames中去。

 

復(fù)制代碼代碼如下:
 
var names = ["Mohsen", "Hilary", "Justyn", "Amy", "Rich", "Graham", "Vic"]
var copiedNames = names.copy()

通過改變copiedNames的值可以驗證,數(shù)組已經(jīng)被完整拷貝,不會影響到之前的數(shù)組:

 

 

復(fù)制代碼代碼如下:
 
copiedNames[0] = "Mo"
println(names[0])
// prints "Mohsen"

 

注意:如果你不確定你需要的數(shù)組是否是獨立的,那么僅僅使用unshare就可以了。而copy方法不管當(dāng)前是不是獨立的,都會完整拷貝一次,哪怕這個數(shù)組已經(jīng)是unshare的了。



注:相關(guān)教程知識閱讀請移步到swift教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产精品视频无码| 日本不卡网站| 国产高清在线观看视频| 国产成人三级在线观看| 天天摸天天做天天爽水多| 国产精品伦理一区二区| 欧美天堂一区二区三区| jizz免费一区二区三区| 麻豆91小视频| 激情综合一区二区三区| 日本精品久久| 精品视频99| 91在线一区二区三区| 麻豆一区二区三区| 亚洲一区二区四区蜜桃| 亚洲第一精品夜夜躁人人爽| 欧美人与性动xxxx| 欧美日韩国产中文精品字幕自在自线| 久久久久一区二区三区四区| 91精品在线观看入口| 日韩在线观看免费全集电视剧网站| 亚洲国产成人一区二区三区| 久久人人爽爽人人爽人人片av| 午夜精品久久久久久久91蜜桃| 丁香久久五月| 日韩欧美中文在线视频| 欧美不卡一区二区三区四区| 色网站免费在线观看| 精品久久久久久一区| 日本a视频在线观看| 亚洲欧美中文日韩在线| 午夜精品亚洲一区二区三区嫩草| 性猛交娇小69hd| 色综合亚洲欧洲| 一级片一区二区三区| 99成人国产精品视频| www.亚洲欧美| 中文字幕av在线| 日韩第二十一页| 日本高清中文字幕二区在线| 美女脱光衣服与内衣内裤一区二区三区四区| 在线电影福利片| 国产又大又黄的视频| 国产精品麻豆免费版现看视频| 成人免费无码av| 免费精品99久久国产综合精品| 男女全黄做爰文章| 精品成人久久av| 最近更新在线中文字幕一页| 国产精品一区高清| 成人黄色在线| 精品美女一区二区| 91久久午夜| 400部精品国偷自产在线观看| 午夜欧美一区二区三区在线播放| 欧美激情中文字幕乱码免费| sis001欧美| 免费av一区二区三区| 国产精品999在线观看| 蜜桃精品久久久久久久免费影院| 成人婷婷网色偷偷亚洲男人的天堂| 久久久久毛片免费观看| 日韩一区二区三区视频| 91国产视频在线| 婷婷开心激情网| 欧洲av无码放荡人妇网站| 日韩精品小视频| 手机在线免费看av| 中文字幕+乱码+中文| 337人体粉嫩噜噜噜| 国产视频精品在线| 亚洲欧美中文日韩v在线观看| 可以直接看的av网址站| 日韩在线观看视频一区二区| 2222www色视频在线观看| www.99精品| 欧美极品aaaaabbbbb| 亚洲精品日韩丝袜精品| 蜜臀av性久久久久av蜜臀妖精| 久久久午夜精品理论片中文字幕| 国内亚洲精品| 免费**毛片在线| 激情在线小视频| 美女激情视频网站| v天堂中文在线| 精品国产综合久久| 欧美精品日韩在线| 手机看片福利永久国产日韩| 久久婷婷影院| 精品国产免费人成在线观看| 1024手机在线观看你懂的| 免费人成视频在线| 欧美日韩专区在线| 国产精品a成v人在线播放| 欧产日产国产精品视频| 一个人免费视频www在线观看| av大片免费在线观看| 亚洲区小说区图片区qvod| 欧美日韩卡一| 日韩日本欧美亚洲| 欧美不卡一区二区三区| 26uuu另类亚洲欧美日本老年| 天天草夜夜骑| 波多野结衣不卡| 国产日产亚洲精品系列| 午夜精品一区在线观看| 国产乱子伦农村叉叉叉| 亚洲激情影院| 久久国产视频精品| 亚洲第一网站男人都懂| 尤物视频网站在线观看| 综合在线影院| 视色,视色影院,视色影库,视色网| 精品高清美女精品国产区| 久久777国产线看观看精品| 成年人黄国产| 黄色一级片在线观看| 欧美午夜美女看片| 亚洲午夜精品一区二区国产| 亚洲黄色免费三级| av中文一区| 岛国av免费观看| 一区二区三区日韩欧美精品| 91在线第一页| 高清免费电影在线观看| 91麻豆精品国产91久久久使用方法| 国产亚洲欧美日韩高清| 国产激情美女久久久久久吹潮| 91精品在线一区二区| 日韩午夜在线视频| 欧美一区日本一区韩国一区| 国产艳俗歌舞表演hd| 牛夜精品久久久久久久99黑人| 久久尤物电影视频在线观看| 国产毛片一区二区三区va在线| 日韩欧美高清一区二区三区| 91资源在线观看| 国产成人av自拍| 视频一区二区三区不卡| 亚洲成人av在线电影| av日韩亚洲| 亚洲性无码av在线| 精品一区二区三区不卡| 日韩一区有码在线| 日韩激情一区二区三区| 毛毛毛毛毛毛毛片123| 国产精品一区免费在线观看| 成人丝袜视频网| 国产一区二区三区网站| 国内精品国产成人国产三级| 成人妇女免费播放久久久| 擼擼色在线看观看免费| 性欧美大战久久久久久久免费观看| 精品成人av| 欧美牲交a欧美牲交| 日韩欧美国产大片| 欧美日韩国产综合视频在线观看中文| 午夜老司机在线观看| 国产91免费看片| 五月天丁香社区| av中文字幕免费在线观看| 国产一精品一aⅴ一免费| 一级全黄裸体免费视频| 91成人天堂久久成人| www.久久久久久久久| 国产a久久精品一区二区三区| 91国内外精品自在线播放| 欧美放荡的少妇| 污视频网站免费观看| 成人精品久久一区二区三区| 视频一区二区三区不卡| 久久精品一区二区三区av| 视频在线不卡免费观看| 亚洲精品成a人在线观看| 最后生还者第二季在线观看| 色综合色综合久久综合频道88| 久久99精品久久久久婷婷| 日韩av电影手机在线观看| 午夜激情久久久| 欧洲av在线精品| 国内揄拍国内精品少妇国语| 国产精品乱码一区二区三区视频| 国产99久久久国产精品成人免费| 一区二区三区四区精品在线视频| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 午夜在线播放| 国产爆初菊在线观看免费视频网站| 中文字幕有码热在线视频| 日韩欧美在线电影| 国产日韩二区| 日韩在线观看精品| 少妇网站在线观看| 红桃av在线播放| www.国产区| 亚洲精选一二三| 人妻久久一区二区| 国产强被迫伦姧在线观看无码| 欧美有码在线观看视频| 性猛交ⅹxxx富婆video| 无码任你躁久久久久久老妇| 免费在线观看h| 中文在线√天堂| 九色在线视频| 色综合久久综合| 一本色道久久综合亚洲精品图片| 国产精品一区二区美女视频免费看| 日韩大片在线永久免费观看网站| 在线看片你懂的| 精品高清美女精品国产区| 91视频国产一区| 国产亚洲一卡2卡3卡4卡新区| 久久久精品一区二区涩爱| 久久97久久97精品免视看| 国产成人麻豆精品午夜在线| 不用播放器的免费av| 韩国一区二区在线观看| 折磨小男生性器羞耻的故事| 日韩精品免费在线视频| 一色桃子av在线| 亚洲成**性毛茸茸| 亚洲精选在线视频| 五月婷婷丁香色| 久久一日本道色综合久久| 成人动漫网站在线观看| 亚洲一区二区乱码| jizzjizzjizz国产| 天天综合网站| 影音先锋在线一区| 国产精品高潮呻吟久久av野狼| 国产精品网址在线| 97福利一区二区| 精品一区二区三区五区六区| 最近免费观看高清韩国日本大全| 99精品视频免费版的特色功能| 久久久久久国产精品一区| 另类小说第一页| 黄色小视频大全| 奇米777影视成人四色| 欧美黑人xxxⅹ高潮交| 999精品视频在这里| 视频一区二区国产| 中出视频在线观看| 天天干 天天插| 成人免费91| 免费看污污网站| 亚洲一区二区三区无码久久| 日韩视频一区二区三区在线播放免费观看| 欧美一区二区三区在线免费观看| 国产午夜福利精品| 羞羞视频在线观看一区二区| 天堂在线中文视频| 日本免费在线播放| 久久免费视频精品| 国产欧美日韩精品丝袜高跟鞋| 亚洲不卡1卡2卡三卡2021麻豆| 日本在线不卡视频一二三区| 精品国语对白精品自拍视| 日本少妇xxxx| 国产精品扒开腿做爽爽爽视频| 久久日免费视频| 偷偷操不一样的久久| 亚洲综合第一页| 国产一级在线观看视频| 男人的天堂99| 天天爽天天爽天天爽| 久久精品日韩一区二区三区| 人妻无码中文字幕免费视频蜜桃| 亚洲黄色在线免费观看| av免费在线网站| 久久精品国产免费观看99| 欧美性xxxx极品hd满灌| 青青草视频在线观看免费| 国产剧情演绎av| 精品丝袜久久| 少妇免费毛片久久久久久久久| 日韩精品a在线观看91| 黄色av网站免费在线观看| 首页欧美精品中文字幕| 亚洲成人午夜在线| 日韩免费视频一区| 日韩成人中文电影| 亚洲大尺度网站| 国精产品一区一区三区mba桃花| 亚洲同性gay激情无套| 精品国产露脸精彩对白| 色播久久人人爽人人爽人人片视av| 精品99又大又爽又硬少妇毛片| 在线观看麻豆蜜桃| 丝袜亚洲另类欧美综合| 色婷婷亚洲一区二区三区| 国产精品久久久久av蜜臀| 亚洲人精品一区| 女人18毛片九区毛片在线| 国产在线青青草| 亚洲美女精品久久| 国产一二三四| 91精品啪aⅴ在线观看国产| 日韩有码在线观看| 原纱央莉成人av片| 欧美日本国产在线| 亚洲性图一区二区| 老**午夜毛片一区二区三区| 性xxxxfjsxxxxx欧美| 在线成人综合色一区| 亚洲性线免费观看视频成熟| 66m—66摸成人免费视频| 国产黄色在线播放| 黄色网页免费看| 91人妻一区二区| 男女视频网站| 一个人免费视频www在线观看| 午夜影院久久久| 国产欧美va欧美va香蕉在| 中文精品在线观看| 婷婷久久青草热一区二区| 一个人看的www久久| 中午字幕在线观看| 中文字幕免费观看视频| 性欧美疯狂xxxxbbbb| www.激情五月| 韩国在线视频一区| 欧美激情亚洲另类| 欧美大香线蕉线伊人久久国产精品| 97蝌蚪自拍自窝| 日韩精品视频在线观看一区二区三区| 一卡二卡三卡在线观看| 色妞www精品视频| 欧洲成人在线视频|