超碰91资源站-超碰97豆花-超碰97人妻-超碰97人人干-超碰97人人香蕉-超碰97天天操-超碰97在线资源站-超碰97资源站共享-超碰97资源站总站-超碰aa在线91-超碰av操-超碰爱爱

半岛外围网上直营

logo Swift編程語言中文教程

文檔半島外圍網(wǎng)上直營(yíng)>>Swift編程語言中文教程>>Swift編程語言中文教程(十四):Swift初始化

Swift編程語言中文教程(十四):Swift初始化


本頁包含內(nèi)容:

構(gòu)造過程是為了使用某個(gè)類、結(jié)構(gòu)體或枚舉類型的實(shí)例而進(jìn)行的準(zhǔn)備過程。這個(gè)過程包含了為實(shí)例中的每個(gè)屬性設(shè)置初始值和為其執(zhí)行必要的準(zhǔn)備和初始化任務(wù)。

構(gòu)造過程是通過定義構(gòu)造器(Initializers)來實(shí)現(xiàn)的,這些構(gòu)造器可以看做是用來創(chuàng)建特定類型實(shí)例的特殊方法。與 Objective-C 中的構(gòu)造器不同,Swift 的構(gòu)造器無需返回值,它們的主要任務(wù)是保證新實(shí)例在第一次使用前完成正確的初始化。

類實(shí)例也可以通過定義析構(gòu)器(deinitializer)在類實(shí)例釋放之前執(zhí)行特定的清除工作。想了解更多關(guān)于析構(gòu)器的內(nèi)容,請(qǐng)參考析構(gòu)過程。

存儲(chǔ)型屬性的初始賦值

類和結(jié)構(gòu)體在實(shí)例創(chuàng)建時(shí),必須為所有存儲(chǔ)型屬性設(shè)置合適的初始值。存儲(chǔ)型屬性的值不能處于一個(gè)未知的狀態(tài)。

你可以在構(gòu)造器中為存儲(chǔ)型屬性賦初值,也可以在定義屬性時(shí)為其設(shè)置默認(rèn)值。以下章節(jié)將詳細(xì)介紹這兩種方法。

注意:

當(dāng)你為存儲(chǔ)型屬性設(shè)置默認(rèn)值或者在構(gòu)造器中為其賦值時(shí),它們的值是被直接設(shè)置的,不會(huì)觸發(fā)任何屬性觀測(cè)器(property observers)。

構(gòu)造器

構(gòu)造器在創(chuàng)建某特定類型的新實(shí)例時(shí)調(diào)用。它的最簡(jiǎn)形式類似于一個(gè)不帶任何參數(shù)的實(shí)例方法,以關(guān)鍵字init命名。

下面例子中定義了一個(gè)用來保存華氏溫度的結(jié)構(gòu)體Fahrenheit,它擁有一個(gè)Double類型的存儲(chǔ)型屬性temperature:

struct Fahrenheit {
    var temperature: Double
    init() {
        temperature = 32.0
    }
}

var f = Fahrenheit()
println("The default temperature is \(f.temperature)° Fahrenheit")
// 輸出 "The default temperature is 32.0° Fahrenheit”

這個(gè)結(jié)構(gòu)體定義了一個(gè)不帶參數(shù)的構(gòu)造器init,并在里面將存儲(chǔ)型屬性temperature的值初始化為32.0(華攝氏度下水的冰點(diǎn))。

默認(rèn)屬性值

如前所述,你可以在構(gòu)造器中為存儲(chǔ)型屬性設(shè)置初始值;同樣,你也可以在屬性聲明時(shí)為其設(shè)置默認(rèn)值。

注意:

如果一個(gè)屬性總是使用同一個(gè)初始值,可以為其設(shè)置一個(gè)默認(rèn)值。無論定義默認(rèn)值還是在構(gòu)造器中賦值,最終它們實(shí)現(xiàn)的效果是一樣的,只不過默認(rèn)值跟屬性構(gòu)造過程結(jié)合的更緊密。使用默認(rèn)值能讓你的構(gòu)造器更簡(jiǎn)潔、更清晰,且能通過默認(rèn)值自動(dòng)推導(dǎo)出屬性的類型;同時(shí),它也能讓你充分利用默認(rèn)構(gòu)造器、構(gòu)造器繼承(后續(xù)章節(jié)將講到)等特性。

你可以使用更簡(jiǎn)單的方式在定義結(jié)構(gòu)體Fahrenheit時(shí)為屬性temperature設(shè)置默認(rèn)值:

struct Fahrenheit {
    var temperature = 32.0
}

定制化構(gòu)造過程

你可以通過輸入?yún)?shù)和可選屬性類型來定制構(gòu)造過程,也可以在構(gòu)造過程中修改常量屬性。這些都將在后面章節(jié)中提到。

構(gòu)造參數(shù)

你可以在定義構(gòu)造器時(shí)提供構(gòu)造參數(shù),為其提供定制化構(gòu)造所需值的類型和名字。構(gòu)造器參數(shù)的功能和語法跟函數(shù)和方法參數(shù)相同。

下面例子中定義了一個(gè)包含攝氏度溫度的結(jié)構(gòu)體Celsius。它定義了兩個(gè)不同的構(gòu)造器:init(fromFahrenheit:)和init(fromKelvin:),二者分別通過接受不同刻度表示的溫度值來創(chuàng)建新的實(shí)例:

struct Celsius {
    var temperatureInCelsius: Double = 0.0
    init(fromFahrenheit fahrenheit: Double) {
        temperatureInCelsius = (fahrenheit - 32.0) / 1.8
    }
    init(fromKelvin kelvin: Double) {
        temperatureInCelsius = kelvin - 273.15
    }
}

let boilingPointOfWater = Celsius(fromFahrenheit: 212.0)
// boilingPointOfWater.temperatureInCelsius 是 100.0
let freezingPointOfWater = Celsius(fromKelvin: 273.15)
// freezingPointOfWater.temperatureInCelsius 是 0.0”

第一個(gè)構(gòu)造器擁有一個(gè)構(gòu)造參數(shù),其外部名字為fromFahrenheit,內(nèi)部名字為fahrenheit;第二個(gè)構(gòu)造器也擁有一個(gè)構(gòu)造參數(shù),其外部名字為fromKelvin,內(nèi)部名字為kelvin。這兩個(gè)構(gòu)造器都將唯一的參數(shù)值轉(zhuǎn)換成攝氏溫度值,并保存在屬性temperatureInCelsius中。

內(nèi)部和外部參數(shù)名

跟函數(shù)和方法參數(shù)相同,構(gòu)造參數(shù)也存在一個(gè)在構(gòu)造器內(nèi)部使用的參數(shù)名字和一個(gè)在調(diào)用構(gòu)造器時(shí)使用的外部參數(shù)名字。

然而,構(gòu)造器并不像函數(shù)和方法那樣在括號(hào)前有一個(gè)可辨別的名字。所以在調(diào)用構(gòu)造器時(shí),主要通過構(gòu)造器中的參數(shù)名和類型來確定需要調(diào)用的構(gòu)造器。正因?yàn)閰?shù)如此重要,如果你在定義構(gòu)造器時(shí)沒有提供參數(shù)的外部名字,Swift 會(huì)為每個(gè)構(gòu)造器的參數(shù)自動(dòng)生成一個(gè)跟內(nèi)部名字相同的外部名,就相當(dāng)于在每個(gè)構(gòu)造參數(shù)之前加了一個(gè)哈希符號(hào)。

注意:

如果你不希望為構(gòu)造器的某個(gè)參數(shù)提供外部名字,你可以使用下劃線_來顯示描述它的外部名,以此覆蓋上面所說的默認(rèn)行為。

以下例子中定義了一個(gè)結(jié)構(gòu)體Color,它包含了三個(gè)常量:red、green和blue。這些屬性可以存儲(chǔ)0.0到1.0之間的值,用來指示顏色中紅、綠、藍(lán)成分的含量。

Color提供了一個(gè)構(gòu)造器,其中包含三個(gè)Double類型的構(gòu)造參數(shù):

struct Color {
    let red = 0.0, green = 0.0, blue = 0.0
    init(red: Double, green: Double, blue: Double) {
        self.red   = red
        self.green = green
        self.blue  = blue
    }
}

每當(dāng)你創(chuàng)建一個(gè)新的Color實(shí)例,你都需要通過三種顏色的外部參數(shù)名來傳值,并調(diào)用構(gòu)造器。

let magenta = Color(red: 1.0, green: 0.0, blue: 1.0)

注意,如果不通過外部參數(shù)名字傳值,你是沒法調(diào)用這個(gè)構(gòu)造器的。只要構(gòu)造器定義了某個(gè)外部參數(shù)名,你就必須使用它,忽略它將導(dǎo)致編譯錯(cuò)誤:

let veryGreen = Color(0.0, 1.0, 0.0)
// 報(bào)編譯時(shí)錯(cuò)誤,需要外部名稱

可選屬性類型

如果你定制的類型包含一個(gè)邏輯上允許取值為空的存儲(chǔ)型屬性--不管是因?yàn)樗鼰o法在初始化時(shí)賦值,還是因?yàn)樗梢栽谥竽硞€(gè)時(shí)間點(diǎn)可以賦值為空--你都需要將它定義為可選類型optional type。可選類型的屬性將自動(dòng)初始化為空nil,表示這個(gè)屬性是故意在初始化時(shí)設(shè)置為空的。

下面例子中定義了類SurveyQuestion,它包含一個(gè)可選字符串屬性response:

class SurveyQuestion {
    var text: String
    var response: String?
    init(text: String) {
        self.text = text
    }
    func ask() {
        println(text)
    }
}
let cheeseQuestion = SurveyQuestion(text: "Do you like cheese?")
cheeseQuestion.ask()
// 輸出 "Do you like cheese?"
cheeseQuestion.response = "Yes, I do like cheese.

調(diào)查問題在問題提出之后,我們才能得到回答。所以我們將屬性回答response聲明為String?類型,或者說是可選字符串類型optional String。當(dāng)SurveyQuestion實(shí)例化時(shí),它將自動(dòng)賦值為空nil,表明暫時(shí)還不存在此字符串。

構(gòu)造過程中常量屬性的修改

只要在構(gòu)造過程結(jié)束前常量的值能確定,你可以在構(gòu)造過程中的任意時(shí)間點(diǎn)修改常量屬性的值。

注意:

對(duì)某個(gè)類實(shí)例來說,它的常量屬性只能在定義它的類的構(gòu)造過程中修改;不能在子類中修改。

你可以修改上面的SurveyQuestion示例,用常量屬性替代變量屬性text,指明問題內(nèi)容text在其創(chuàng)建之后不會(huì)再被修改。盡管text屬性現(xiàn)在是常量,我們?nèi)匀豢梢栽谄漕惖臉?gòu)造器中修改它的值:

class SurveyQuestion {
    let text: String
    var response: String?
    init(text: String) {
        self.text = text
    }
    func ask() {
        println(text)
    }
}
let beetsQuestion = SurveyQuestion(text: "How about beets?")
beetsQuestion.ask()javascript:void(0)
// 輸出 "How about beets?"
beetsQuestion.response = "I also like beets. (But not with cheese.)

默認(rèn)構(gòu)造器

Swift 將為所有屬性已提供默認(rèn)值的且自身沒有定義任何構(gòu)造器的結(jié)構(gòu)體或基類,提供一個(gè)默認(rèn)的構(gòu)造器。這個(gè)默認(rèn)構(gòu)造器將簡(jiǎn)單的創(chuàng)建一個(gè)所有屬性值都設(shè)置為默認(rèn)值的實(shí)例。

下面例子中創(chuàng)建了一個(gè)類ShoppingListItem,它封裝了購物清單中的某一項(xiàng)的屬性:名字(name)、數(shù)量(quantity)和購買狀態(tài) purchase state。

class ShoppingListItem {
    var name: String?
    var quantity = 1
    var purchased = false
}
var item = ShoppingListItem()

由于ShoppingListItem類中的所有屬性都有默認(rèn)值,且它是沒有父類的基類,它將自動(dòng)獲得一個(gè)可以為所有屬性設(shè)置默認(rèn)值的默認(rèn)構(gòu)造器(盡管代碼中沒有顯式為name屬性設(shè)置默認(rèn)值,但由于name是可選字符串類型,它將默認(rèn)設(shè)置為nil)。上面例子中使用默認(rèn)構(gòu)造器創(chuàng)造了一個(gè)ShoppingListItem類的實(shí)例(使用ShoppingListItem()形式的構(gòu)造器語法),并將其賦值給變量item。

結(jié)構(gòu)體的逐一成員構(gòu)造器

除上面提到的默認(rèn)構(gòu)造器,如果結(jié)構(gòu)體對(duì)所有存儲(chǔ)型屬性提供了默認(rèn)值且自身沒有提供定制的構(gòu)造器,它們能自動(dòng)獲得一個(gè)逐一成員構(gòu)造器。

逐一成員構(gòu)造器是用來初始化結(jié)構(gòu)體新實(shí)例里成員屬性的快捷方法。我們?cè)谡{(diào)用逐一成員構(gòu)造器時(shí),通過與成員屬性名相同的參數(shù)名進(jìn)行傳值來完成對(duì)成員屬性的初始賦值。

下面例子中定義了一個(gè)結(jié)構(gòu)體Size,它包含兩個(gè)屬性width和height。Swift 可以根據(jù)這兩個(gè)屬性的初始賦值0.0自動(dòng)推導(dǎo)出它們的類型Double。

由于這兩個(gè)存儲(chǔ)型屬性都有默認(rèn)值,結(jié)構(gòu)體Size自動(dòng)獲得了一個(gè)逐一成員構(gòu)造器 init(width:height:)。 你可以用它來為Size創(chuàng)建新的實(shí)例:

struct Size {
    var width = 0.0, height = 0.0
}
let twoByTwo = Size(width: 2.0, height: 2.0)

值類型的構(gòu)造器代理

構(gòu)造器可以通過調(diào)用其它構(gòu)造器來完成實(shí)例的部分構(gòu)造過程。這一過程稱為構(gòu)造器代理,它能減少多個(gè)構(gòu)造器間的代碼重復(fù)。

構(gòu)造器代理的實(shí)現(xiàn)規(guī)則和形式在值類型和類類型中有所不同。值類型(結(jié)構(gòu)體和枚舉類型)不支持繼承,所以構(gòu)造器代理的過程相對(duì)簡(jiǎn)單,因?yàn)樗鼈冎荒艽砣蝿?wù)給本身提供的其它構(gòu)造器。類則不同,它可以繼承自其它類(請(qǐng)參考繼承),這意味著類有責(zé)任保證其所有繼承的存儲(chǔ)型屬性在構(gòu)造時(shí)也能正確的初始化。這些責(zé)任將在后續(xù)章節(jié)類的繼承和構(gòu)造過程中介紹。

對(duì)于值類型,你可以使用self.init在自定義的構(gòu)造器中引用其它的屬于相同值類型的構(gòu)造器。并且你只能在構(gòu)造器內(nèi)部調(diào)用self.init。

注意,如果你為某個(gè)值類型定義了一個(gè)定制的構(gòu)造器,你將無法訪問到默認(rèn)構(gòu)造器(如果是結(jié)構(gòu)體,則無法訪問逐一對(duì)象構(gòu)造器)。這個(gè)限制可以防止你在為值類型定義了一個(gè)更復(fù)雜的,完成了重要準(zhǔn)備構(gòu)造器之后,別人還是錯(cuò)誤的使用了那個(gè)自動(dòng)生成的構(gòu)造器。

注意:

假如你想通過默認(rèn)構(gòu)造器、逐一對(duì)象構(gòu)造器以及你自己定制的構(gòu)造器為值類型創(chuàng)建實(shí)例,我們建議你將自己定制的構(gòu)造器寫到擴(kuò)展(extension)中,而不是跟值類型定義混在一起。想查看更多內(nèi)容,請(qǐng)查看擴(kuò)展章節(jié)。

下面例子將定義一個(gè)結(jié)構(gòu)體Rect,用來展現(xiàn)幾何矩形。這個(gè)例子需要兩個(gè)輔助的結(jié)構(gòu)體Size和Point,它們各自為其所有的屬性提供了初始值0.0。

struct Size {
    var width = 0.0, height = 0.0
}
struct Point {
    var x = 0.0, y = 0.0
}

你可以通過以下三種方式為Rect創(chuàng)建實(shí)例--使用默認(rèn)的0值來初始化origin和size屬性;使用特定的origin和size實(shí)例來初始化;使用特定的center和size來初始化。在下面Rect結(jié)構(gòu)體定義中,我們?yōu)橹N方式提供了三個(gè)自定義的構(gòu)造器:

struct Rect {
    var origin = Point()
    var size = Size()
    init() {}
    init(origin: Point, size: Size) {
        self.origin = origin
        self.size = size
    }
    init(center: Point, size: Size) {
        let originX = center.x - (size.width / 2)
        let originY = center.y - (size.height / 2)
        self.init(origin: Point(x: originX, y: originY), size: size)
    }
}

第一個(gè)Rect構(gòu)造器init(),在功能上跟沒有自定義構(gòu)造器時(shí)自動(dòng)獲得的默認(rèn)構(gòu)造器是一樣的。這個(gè)構(gòu)造器是一個(gè)空函數(shù),使用一對(duì)大括號(hào){}來描述,它沒有執(zhí)行任何定制的構(gòu)造過程。調(diào)用這個(gè)構(gòu)造器將返回一個(gè)Rect實(shí)例,它的origin和size屬性都使用定義時(shí)的默認(rèn)值Point(x: 0.0, y: 0.0)和Size(width: 0.0, height: 0.0):

let basicRect = Rect()
// basicRect 的原點(diǎn)是 (0.0, 0.0),尺寸是 (0.0, 0.0)

第二個(gè)Rect構(gòu)造器init(origin:size:),在功能上跟結(jié)構(gòu)體在沒有自定義構(gòu)造器時(shí)獲得的逐一成員構(gòu)造器是一樣的。這個(gè)構(gòu)造器只是簡(jiǎn)單的將origin和size的參數(shù)值賦給對(duì)應(yīng)的存儲(chǔ)型屬性:

let originRect = Rect(origin: Point(x: 2.0, y: 2.0),
    size: Size(width: 5.0, height: 5.0))
// originRect 的原點(diǎn)是 (2.0, 2.0),尺寸是 (5.0, 5.0)

第三個(gè)Rect構(gòu)造器init(center:size:)稍微復(fù)雜一點(diǎn)。它先通過center和size的值計(jì)算出origin的坐標(biāo)。然后再調(diào)用(或代理給)init(origin:size:)構(gòu)造器來將新的origin和size值賦值到對(duì)應(yīng)的屬性中:

let centerRect = Rect(center: Point(x: 4.0, y: 4.0), size: Size(width: 3.0, height: 3.0)) 
// centerRect 的原點(diǎn)是 (2.5, 2.5),尺寸是 (3.0, 3.0)

構(gòu)造器init(center:size:)可以自己將origin和size的新值賦值到對(duì)應(yīng)的屬性中。然而盡量利用現(xiàn)有的構(gòu)造器和它所提供的功能來實(shí)現(xiàn)init(center:size:)的功能,是更方便、更清晰和更直觀的方法。

注意:

如果你想用另外一種不需要自己定義init()和init(origin:size:)的方式來實(shí)現(xiàn)這個(gè)例子,請(qǐng)參考擴(kuò)展。

類的繼承和構(gòu)造過程

類里面的所有存儲(chǔ)型屬性--包括所有繼承自父類的屬性--都必須在構(gòu)造過程中設(shè)置初始值。

Swift 提供了兩種類型的類構(gòu)造器來確保所有類實(shí)例中存儲(chǔ)型屬性都能獲得初始值,它們分別是指定構(gòu)造器和便利構(gòu)造器。

指定構(gòu)造器和便利構(gòu)造器

指定構(gòu)造器是類中最主要的構(gòu)造器。一個(gè)指定構(gòu)造器將初始化類中提供的所有屬性,并根據(jù)父類鏈往上調(diào)用父類的構(gòu)造器來實(shí)現(xiàn)父類的初始化。

每一個(gè)類都必須擁有至少一個(gè)指定構(gòu)造器。在某些情況下,許多類通過繼承了父類中的指定構(gòu)造器而滿足了這個(gè)條件。具體內(nèi)容請(qǐng)參考后續(xù)章節(jié)自動(dòng)構(gòu)造器的繼承

便利構(gòu)造器是類中比較次要的、輔助型的構(gòu)造器。你可以定義便利構(gòu)造器來調(diào)用同一個(gè)類中的指定構(gòu)造器,并為其參數(shù)提供默認(rèn)值。你也可以定義便利構(gòu)造器來創(chuàng)建一個(gè)特殊用途或特定輸入的實(shí)例。

你應(yīng)當(dāng)只在必要的時(shí)候?yàn)轭愄峁┍憷麡?gòu)造器,比方說某種情況下通過使用便利構(gòu)造器來快捷調(diào)用某個(gè)指定構(gòu)造器,能夠節(jié)省更多開發(fā)時(shí)間并讓類的構(gòu)造過程更清、晰明。

構(gòu)造器鏈

為了簡(jiǎn)化指定構(gòu)造器和便利構(gòu)造器之間的調(diào)用關(guān)系,Swift 采用以下三條規(guī)則來限制構(gòu)造器之間的代理調(diào)用:

規(guī)則 1

指定構(gòu)造器必須調(diào)用其直接父類的的指定構(gòu)造器。

規(guī)則 2

便利構(gòu)造器必須調(diào)用同一類中定義的其它構(gòu)造器。

規(guī)則 3

便利構(gòu)造器必須最終以調(diào)用一個(gè)指定構(gòu)造器結(jié)束。

一個(gè)更方便記憶的方法是:

  • 指定構(gòu)造器必須總是向上代理
  • 便利構(gòu)造器必須總是橫向代理

這些規(guī)則可以通過下面圖例來說明:

Swift編程語言中文教程(十四):Swift初始化(Initialization)

如圖所示,父類中包含一個(gè)指定構(gòu)造器和兩個(gè)便利構(gòu)造器。其中一個(gè)便利構(gòu)造器調(diào)用了另外一個(gè)便利構(gòu)造器,而后者又調(diào)用了唯一的指定構(gòu)造器。這滿足了上面提到的規(guī)則2和3。這個(gè)父類沒有自己的父類,所以規(guī)則1沒有用到。

子類中包含兩個(gè)指定構(gòu)造器和一個(gè)便利構(gòu)造器。便利構(gòu)造器必須調(diào)用兩個(gè)指定構(gòu)造器中的任意一個(gè),因?yàn)樗荒苷{(diào)用同一個(gè)類里的其他構(gòu)造器。這滿足了上面提到的規(guī)則2和3。而兩個(gè)指定構(gòu)造器必須調(diào)用父類中唯一的指定構(gòu)造器,這滿足了規(guī)則1。

注意:

這些規(guī)則不會(huì)影響使用時(shí),如何用類去創(chuàng)建實(shí)例。任何上圖中展示的構(gòu)造器都可以用來完整創(chuàng)建對(duì)應(yīng)類的實(shí)例。這些規(guī)則只在實(shí)現(xiàn)類的定義時(shí)有影響。

下面圖例中展示了一種更復(fù)雜的類層級(jí)結(jié)構(gòu)。它演示了指定構(gòu)造器是如果在類層級(jí)中充當(dāng)“管道”的作用,在類的構(gòu)造器鏈上簡(jiǎn)化了類之間的內(nèi)部關(guān)系。

Swift編程語言中文教程(十四):Swift初始化(Initialization)

兩段式構(gòu)造過程

Swift 中類的構(gòu)造過程包含兩個(gè)階段。第一個(gè)階段,每個(gè)存儲(chǔ)型屬性通過引入它們的類的構(gòu)造器來設(shè)置初始值。當(dāng)每一個(gè)存儲(chǔ)型屬性值被確定后,第二階段開始,它給每個(gè)類一次機(jī)會(huì)在新實(shí)例準(zhǔn)備使用之前進(jìn)一步定制它們的存儲(chǔ)型屬性。

兩段式構(gòu)造過程的使用讓構(gòu)造過程更安全,同時(shí)在整個(gè)類層級(jí)結(jié)構(gòu)中給予了每個(gè)類完全的靈活性。兩段式構(gòu)造過程可以防止屬性值在初始化之前被訪問;也可以防止屬性被另外一個(gè)構(gòu)造器意外地賦予不同的值。

注意:

Swift的兩段式構(gòu)造過程跟 Objective-C 中的構(gòu)造過程類似。最主要的區(qū)別在于階段 1,Objective-C 給每一個(gè)屬性賦值0或空值(比如說0或nil)。Swift 的構(gòu)造流程則更加靈活,它允許你設(shè)置定制的初始值,并自如應(yīng)對(duì)某些屬性不能以0或nil作為合法默認(rèn)值的情況。

Swift 編譯器將執(zhí)行 4 種有效的安全檢查,以確保兩段式構(gòu)造過程能順利完成:

安全檢查 1

指定構(gòu)造器必須保證它所在類引入的所有屬性都必須先初始化完成,之后才能將其它構(gòu)造任務(wù)向上代理給父類中的構(gòu)造器。

如上所述,一個(gè)對(duì)象的內(nèi)存只有在其所有存儲(chǔ)型屬性確定之后才能完全初始化。為了滿足這一規(guī)則,指定構(gòu)造器必須保證它所在類引入的屬性在它往上代理之前先完成初始化。

安全檢查 2

指定構(gòu)造器必須先向上代理調(diào)用父類構(gòu)造器,然后再為繼承的屬性設(shè)置新值。如果沒這么做,指定構(gòu)造器賦予的新值將被父類中的構(gòu)造器所覆蓋。

安全檢查 3

便利構(gòu)造器必須先代理調(diào)用同一類中的其它構(gòu)造器,然后再為任意屬性賦新值。如果沒這么做,便利構(gòu)造器賦予的新值將被同一類中其它指定構(gòu)造器所覆蓋。

安全檢查 4

構(gòu)造器在第一階段構(gòu)造完成之前,不能調(diào)用任何實(shí)例方法、不能讀取任何實(shí)例屬性的值,也不能引用self的值。

以下是兩段式構(gòu)造過程中基于上述安全檢查的構(gòu)造流程展示:

階段 1

  • 某個(gè)指定構(gòu)造器或便利構(gòu)造器被調(diào)用;
  • 完成新實(shí)例內(nèi)存的分配,但此時(shí)內(nèi)存還沒有被初始化;
  • 指定構(gòu)造器確保其所在類引入的所有存儲(chǔ)型屬性都已賦初值。存儲(chǔ)型屬性所屬的內(nèi)存完成初始化;
  • 指定構(gòu)造器將調(diào)用父類的構(gòu)造器,完成父類屬性的初始化;
  • 這個(gè)調(diào)用父類構(gòu)造器的過程沿著構(gòu)造器鏈一直往上執(zhí)行,直到到達(dá)構(gòu)造器鏈的最頂部;
  • 當(dāng)?shù)竭_(dá)了構(gòu)造器鏈最頂部,且已確保所有實(shí)例包含的存儲(chǔ)型屬性都已經(jīng)賦值,這個(gè)實(shí)例的內(nèi)存被認(rèn)為已經(jīng)完全初始化。此時(shí)階段1完成。

階段 2

  • 從頂部構(gòu)造器鏈一直往下,每個(gè)構(gòu)造器鏈中類的指定構(gòu)造器都有機(jī)會(huì)進(jìn)一步定制實(shí)例。構(gòu)造器此時(shí)可以訪問self、修改它的屬性并調(diào)用實(shí)例方法等等。
  • 最終,任意構(gòu)造器鏈中的便利構(gòu)造器可以有機(jī)會(huì)定制實(shí)例和使用self。

下圖展示了在假定的子類和父類之間構(gòu)造的階段1:

Swift編程語言中文教程(十四):Swift初始化(Initialization)

在這個(gè)例子中,構(gòu)造過程從對(duì)子類中一個(gè)便利構(gòu)造器的調(diào)用開始。這個(gè)便利構(gòu)造器此時(shí)沒法修改任何屬性,它把構(gòu)造任務(wù)代理給同一類中的指定構(gòu)造器。

如安全檢查1所示,指定構(gòu)造器將確保所有子類的屬性都有值。然后它將調(diào)用父類的指定構(gòu)造器,并沿著造器鏈一直往上完成父類的構(gòu)建過程。

父類中的指定構(gòu)造器確保所有父類的屬性都有值。由于沒有更多的父類需要構(gòu)建,也就無需繼續(xù)向上做構(gòu)建代理。

一旦父類中所有屬性都有了初始值,實(shí)例的內(nèi)存被認(rèn)為是完全初始化,而階段1也已完成。

以下展示了相同構(gòu)造過程的階段2:

Swift編程語言中文教程(十四):Swift初始化(Initialization)

父類中的指定構(gòu)造器現(xiàn)在有機(jī)會(huì)進(jìn)一步來定制實(shí)例(盡管它沒有這種必要)。

一旦父類中的指定構(gòu)造器完成調(diào)用,子類的構(gòu)指定構(gòu)造器可以執(zhí)行更多的定制操作(同樣,它也沒有這種必要)。

最終,一旦子類的指定構(gòu)造器完成調(diào)用,最開始被調(diào)用的便利構(gòu)造器可以執(zhí)行更多的定制操作。

構(gòu)造器的繼承和重載

跟 Objective-C 中的子類不同,Swift 中的子類不會(huì)默認(rèn)繼承父類的構(gòu)造器。Swift 的這種機(jī)制可以防止一個(gè)父類的簡(jiǎn)單構(gòu)造器被一個(gè)更專業(yè)的子類繼承,并被錯(cuò)誤的用來創(chuàng)建子類的實(shí)例。

假如你希望自定義的子類中能實(shí)現(xiàn)一個(gè)或多個(gè)跟父類相同的構(gòu)造器--也許是為了完成一些定制的構(gòu)造過程--你可以在你定制的子類中提供和重載與父類相同的構(gòu)造器。

如果你重載的構(gòu)造器是一個(gè)指定構(gòu)造器,你可以在子類里重載它的實(shí)現(xiàn),并在自定義版本的構(gòu)造器中調(diào)用父類版本的構(gòu)造器。

如果你重載的構(gòu)造器是一個(gè)便利構(gòu)造器,你的重載過程必須通過調(diào)用同一類中提供的其它指定構(gòu)造器來實(shí)現(xiàn)。這一規(guī)則的詳細(xì)內(nèi)容請(qǐng)參考構(gòu)造器鏈

注意:

與方法、屬性和下標(biāo)不同,在重載構(gòu)造器時(shí)你沒有必要使用關(guān)鍵字override。

自動(dòng)構(gòu)造器的繼承

如上所述,子類不會(huì)默認(rèn)繼承父類的構(gòu)造器。但是如果特定條件可以滿足,父類構(gòu)造器是可以被自動(dòng)繼承的。在實(shí)踐中,這意味著對(duì)于許多常見場(chǎng)景你不必重載父類的構(gòu)造器,并且在盡可能安全的情況下以最小的代價(jià)來繼承父類的構(gòu)造器。

假設(shè)要為子類中引入的任意新屬性提供默認(rèn)值,請(qǐng)遵守以下2個(gè)規(guī)則:

規(guī)則 1

如果子類沒有定義任何指定構(gòu)造器,它將自動(dòng)繼承所有父類的指定構(gòu)造器。

規(guī)則 2

如果子類提供了所有父類指定構(gòu)造器的實(shí)現(xiàn)--不管是通過規(guī)則1繼承過來的,還是通過自定義實(shí)現(xiàn)的--它將自動(dòng)繼承所有父類的便利構(gòu)造器。

即使你在子類中添加了更多的便利構(gòu)造器,這兩條規(guī)則仍然適用。

注意:

子類可以通過部分滿足規(guī)則2的方式,使用子類便利構(gòu)造器來實(shí)現(xiàn)父類的指定構(gòu)造器。

指定構(gòu)造器和便利構(gòu)造器的語法

類的指定構(gòu)造器的寫法跟值類型簡(jiǎn)單構(gòu)造器一樣:

init(parameters) {
    statements
}

便利構(gòu)造器也采用相同樣式的寫法,但需要在init關(guān)鍵字之前放置convenience關(guān)鍵字,并使用空格將它們倆分開:

convenience init(parameters) {
    statements
}

指定構(gòu)造器和便利構(gòu)造器實(shí)戰(zhàn)

接下來的例子將在實(shí)戰(zhàn)中展示指定構(gòu)造器、便利構(gòu)造器和自動(dòng)構(gòu)造器的繼承。它定義了包含三個(gè)類Food、RecipeIngredient以及ShoppingListItem的類層次結(jié)構(gòu),并將演示它們的構(gòu)造器是如何相互作用的。

類層次中的基類是Food,它是一個(gè)簡(jiǎn)單的用來封裝食物名字的類。Food類引入了一個(gè)叫做name的String類型屬性,并且提供了兩個(gè)構(gòu)造器來創(chuàng)建Food實(shí)例:

class Food {
    var name: String
    init(name: String) {
        self.name = name
    }
    convenience init() {
        self.init(name: "[Unnamed]")
    }
}

下圖中展示了Food的構(gòu)造器鏈:

Swift編程語言中文教程(十四):Swift初始化(Initialization)

類沒有提供一個(gè)默認(rèn)的逐一成員構(gòu)造器,所以Food類提供了一個(gè)接受單一參數(shù)name的指定構(gòu)造器。這個(gè)構(gòu)造器可以使用一個(gè)特定的名字來創(chuàng)建新的Food實(shí)例:

let namedMeat = Food(name: "Bacon")
// namedMeat 的名字是 "Bacon”

Food類中的構(gòu)造器init(name: String)被定義為一個(gè)指定構(gòu)造器,因?yàn)樗艽_保所有新Food實(shí)例的中存儲(chǔ)型屬性都被初始化。Food類沒有父類,所以init(name: String)構(gòu)造器不需要調(diào)用super.init()來完成構(gòu)造。

Food類同樣提供了一個(gè)沒有參數(shù)的便利構(gòu)造器 init()。這個(gè)init()構(gòu)造器為新食物提供了一個(gè)默認(rèn)的占位名字,通過代理調(diào)用同一類中定義的指定構(gòu)造器init(name: String)并給參數(shù)name傳值[Unnamed]來實(shí)現(xiàn):

let mysteryMeat = Food()
// mysteryMeat 的名字是 [Unnamed]

類層級(jí)中的第二個(gè)類是Food的子類RecipeIngredient。RecipeIngredient類構(gòu)建了食譜中的一味調(diào)味劑。它引入了Int類型的數(shù)量屬性quantity(以及從Food繼承過來的name屬性),并且定義了兩個(gè)構(gòu)造器來創(chuàng)建RecipeIngredient實(shí)例:

class RecipeIngredient: Food {
    var quantity: Int
    init(name: String, quantity: Int) {
        self.quantity = quantity
        super.init(name: name)
    }
    convenience init(name: String) {
        self.init(name: name, quantity: 1)
    }
}

下圖中展示了RecipeIngredient類的構(gòu)造器鏈:

Swift編程語言中文教程(十四):Swift初始化(Initialization)

RecipeIngredient類擁有一個(gè)指定構(gòu)造器init(name: String, quantity: Int),它可以用來產(chǎn)生新RecipeIngredient實(shí)例的所有屬性值。這個(gè)構(gòu)造器一開始先將傳入的quantity參數(shù)賦值給quantity屬性,這個(gè)屬性也是唯一在RecipeIngredient中新引入的屬性。隨后,構(gòu)造器將任務(wù)向上代理給父類Food的init(name: String)。這個(gè)過程滿足兩段式構(gòu)造過程中的安全檢查1。

RecipeIngredient也定義了一個(gè)便利構(gòu)造器init(name: String),它只通過name來創(chuàng)建RecipeIngredient的實(shí)例。這個(gè)便利構(gòu)造器假設(shè)任意RecipeIngredient實(shí)例的quantity為1,所以不需要顯示指明數(shù)量即可創(chuàng)建出實(shí)例。這個(gè)便利構(gòu)造器的定義可以讓創(chuàng)建實(shí)例更加方便和快捷,并且避免了使用重復(fù)的代碼來創(chuàng)建多個(gè)quantity為 1 的RecipeIngredient實(shí)例。這個(gè)便利構(gòu)造器只是簡(jiǎn)單的將任務(wù)代理給了同一類里提供的指定構(gòu)造器。

注意,RecipeIngredient的便利構(gòu)造器init(name: String)使用了跟Food中指定構(gòu)造器init(name: String)相同的參數(shù)。盡管RecipeIngredient這個(gè)構(gòu)造器是便利構(gòu)造器,RecipeIngredient依然提供了對(duì)所有父類指定構(gòu)造器的實(shí)現(xiàn)。因此,RecipeIngredient也能自動(dòng)繼承了所有父類的便利構(gòu)造器。

在這個(gè)例子中,RecipeIngredient的父類是Food,它有一個(gè)便利構(gòu)造器init()。這個(gè)構(gòu)造器因此也被RecipeIngredient繼承。這個(gè)繼承的init()函數(shù)版本跟Food提供的版本是一樣的,除了它是將任務(wù)代理給RecipeIngredient版本的init(name: String)而不是Food提供的版本。

所有的這三種構(gòu)造器都可以用來創(chuàng)建新的RecipeIngredient實(shí)例:

let oneMysteryItem = RecipeIngredient()
let oneBacon = RecipeIngredient(name: "Bacon")
let sixEggs = RecipeIngredient(name: "Eggs", quantity: 6)

類層級(jí)中第三個(gè)也是最后一個(gè)類是RecipeIngredient的子類,叫做ShoppingListItem。這個(gè)類構(gòu)建了購物單中出現(xiàn)的某一種調(diào)味料。

購物單中的每一項(xiàng)總是從unpurchased未購買狀態(tài)開始的。為了展現(xiàn)這一事實(shí),ShoppingListItem引入了一個(gè)布爾類型的屬性purchased,它的默認(rèn)值是false。ShoppingListItem還添加了一個(gè)計(jì)算型屬性description,它提供了關(guān)于ShoppingListItem實(shí)例的一些文字描述:

class ShoppingListItem: RecipeIngredient {
    var purchased = false
    var description: String {
    var output = "\(quantity) x \(name.lowercaseString)"
        output += purchased ? " ?" : " ?"
        return output
    }
}

注意:

ShoppingListItem沒有定義構(gòu)造器來為purchased提供初始化值,這是因?yàn)槿魏翁砑?到購物單的項(xiàng)的初始狀態(tài)總是未購買。

由于它為自己引入的所有屬性都提供了默認(rèn)值,并且自己沒有定義任何構(gòu)造器,ShoppingListItem將自動(dòng)繼承所有父類中的指定構(gòu)造器和便利構(gòu)造器。

下圖種展示了所有三個(gè)類的構(gòu)造器鏈:

Swift編程語言中文教程(十四):Swift初始化(Initialization)

你可以使用全部三個(gè)繼承來的構(gòu)造器來創(chuàng)建ShoppingListItem的新實(shí)例:

var breakfastList = [
    ShoppingListItem(),
    ShoppingListItem(name: "Bacon"),
    ShoppingListItem(name: "Eggs", quantity: 6),
]
breakfastList[0].name = "Orange juice"
breakfastList[0].purchased = true
for item in breakfastList {
    println(item.description)
}
// 1 x orange juice ?
// 1 x bacon ?
// 6 x eggs ?

如上所述,例子中通過字面量方式創(chuàng)建了一個(gè)新數(shù)組breakfastList,它包含了三個(gè)新的ShoppingListItem實(shí)例,因此數(shù)組的類型也能自動(dòng)推導(dǎo)為ShoppingListItem[]。在數(shù)組創(chuàng)建完之后,數(shù)組中第一個(gè)ShoppingListItem實(shí)例的名字從[Unnamed]修改為Orange juice,并標(biāo)記為已購買。接下來通過遍歷數(shù)組每個(gè)元素并打印它們的描述值,展示了所有項(xiàng)當(dāng)前的默認(rèn)狀態(tài)都已按照預(yù)期完成了賦值。

通過閉包和函數(shù)來設(shè)置屬性的默認(rèn)值

如果某個(gè)存儲(chǔ)型屬性的默認(rèn)值需要特別的定制或準(zhǔn)備,你就可以使用閉包或全局函數(shù)來為其屬性提供定制的默認(rèn)值。每當(dāng)某個(gè)屬性所屬的新類型實(shí)例創(chuàng)建時(shí),對(duì)應(yīng)的閉包或函數(shù)會(huì)被調(diào)用,而它們的返回值會(huì)當(dāng)做默認(rèn)值賦值給這個(gè)屬性。

這種類型的閉包或函數(shù)一般會(huì)創(chuàng)建一個(gè)跟屬性類型相同的臨時(shí)變量,然后修改它的值以滿足預(yù)期的初始狀態(tài),最后將這個(gè)臨時(shí)變量的值作為屬性的默認(rèn)值進(jìn)行返回。

下面列舉了閉包如何提供默認(rèn)值的代碼概要:

class SomeClass {
    let someProperty: SomeType = {
        // 在這個(gè)閉包中給 someProperty 創(chuàng)建一個(gè)默認(rèn)值
        // someValue 必須和 SomeType 類型相同
        return someValue
        }()
}

注意閉包結(jié)尾的大括號(hào)后面接了一對(duì)空的小括號(hào)。這是用來告訴 Swift 需要立刻執(zhí)行此閉包。如果你忽略了這對(duì)括號(hào),相當(dāng)于是將閉包本身作為值賦值給了屬性,而不是將閉包的返回值賦值給屬性。

注意:

如果你使用閉包來初始化屬性的值,請(qǐng)記住在閉包執(zhí)行時(shí),實(shí)例的其它部分都還沒有初始化。這意味著你不能夠在閉包里訪問其它的屬性,就算這個(gè)屬性有默認(rèn)值也不允許。同樣,你也不能使用隱式的self屬性,或者調(diào)用其它的實(shí)例方法。

下面例子中定義了一個(gè)結(jié)構(gòu)體Checkerboard,它構(gòu)建了西洋跳棋游戲的棋盤:

Swift編程語言中文教程(十四):Swift初始化(Initialization)

西洋跳棋游戲在一副黑白格交替的 10x10 的棋盤中進(jìn)行。為了呈現(xiàn)這副游戲棋盤,Checkerboard結(jié)構(gòu)體定義了一個(gè)屬性boardColors,它是一個(gè)包含 100 個(gè)布爾值的數(shù)組。數(shù)組中的某元素布爾值為true表示對(duì)應(yīng)的是一個(gè)黑格,布爾值為false表示對(duì)應(yīng)的是一個(gè)白格。數(shù)組中第一個(gè)元素代表棋盤上左上角的格子,最后一個(gè)元素代表棋盤上右下角的格子。

boardColor數(shù)組是通過一個(gè)閉包來初始化和組裝顏色值的:

struct Checkerboard {
    let boardColors: Bool[] = {
        var temporaryBoard = Bool[]()
        var isBlack = false
        for i in 1...10 {
            for j in 1...10 {
                temporaryBoard.append(isBlack)
                isBlack = !isBlack
            }
            isBlack = !isBlack
        }
        return temporaryBoard
        }()
    func squareIsBlackAtRow(row: Int, column: Int) -> Bool {
        return boardColors[(row * 10) + column]
    }
}

每當(dāng)一個(gè)新的Checkerboard實(shí)例創(chuàng)建時(shí),對(duì)應(yīng)的賦值閉包會(huì)執(zhí)行,一系列顏色值會(huì)被計(jì)算出來作為默認(rèn)值賦值給boardColors。上面例子中描述的閉包將計(jì)算出棋盤中每個(gè)格子合適的顏色,將這些顏色值保存到一個(gè)臨時(shí)數(shù)組temporaryBoard中,并在構(gòu)建完成時(shí)將此數(shù)組作為閉包返回值返回。這個(gè)返回的值將保存到boardColors中,并可以通squareIsBlackAtRow這個(gè)工具函數(shù)來查詢。

let board = Checkerboard()
println(board.squareIsBlackAtRow(0, column: 1))
// 輸出 "true"
println(board.squareIsBlackAtRow(9, column: 9))
// 輸出 "false"

本文資源來自互聯(lián)網(wǎng),由本網(wǎng)整理編輯,供大家學(xué)習(xí)參考。因?yàn)榧夹g(shù)有限,可能會(huì)有不足及錯(cuò)誤,請(qǐng)大家指正。

掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
利記足球官網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) 真人boyu·博魚滾球網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) 最大網(wǎng)上PM娛樂城盤口(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) 正規(guī)雷火競(jìng)技官方買球(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) 雷火競(jìng)技權(quán)威十大網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) boyu·博魚信譽(yù)足球官網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) 權(quán)威188BET足球網(wǎng)(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) 正規(guī)188BET足球大全(官方)網(wǎng)站/網(wǎng)頁版登錄入口/手機(jī)版登錄入口-最新版(已更新) av无码久 | 精品无人乱码一区二 | 91麻豆产精品久久久久久下载 | 911青草亚洲精品 | 1024亚洲精品 | 国产精品麻豆综合在线 | 国产亚洲日本一区二区三 | 国产免费内射又粗又爽密桃视频 | 国产亚洲精aa在线观看 | 国产毛片女人高潮叫声 | 国产经典三级av在线播放 | 国产精品大屁股白桨一区二区 | 成人无码电影 | 国产成人综合久久精品可下载 | 国产成人av大片大片在线播放 | 18黑白丝水手服自慰 | 精品国产蜜桃乱码久久久久 | 成人颜色视频网站免费在线观看 | 精品亚洲aⅴ在线观看 | av无一区二区三区 | 国产剧大全高清免费在线观看 | 成年午夜无码av片在线观看 | 高潮插的我好爽再干噢在线欢看 | 国产不卡视频一区二区三区四区 | 国产不在线观看精品一区免费 | 国产欧美精品国产第一区 | 国产真人无码免费视频 | 2025无码最新国产在线观看 | 国产91对白在线播放 | 国产成人免费在线观看 | 国产高潮流白浆免费视频 | 国产一级一级毛片真人视频 | 国产福利一区二区三区在线视频 | 2025国内精品久久久久 | 18禁裸乳无遮挡自慰免费动漫 | 国产原创大胆私拍视频 | 91无码人妻一区二区三区在线看 | 精品性影院一区二区三区内射 | 精品一区二区三区高清 | 国产精品精品自在线看 | 精品视频精品免费 | 国产成人综合亚洲欧洲色就色 | 高潮抽搐白浆视频在线观看 | 国产睡熟迷奷系列精品视频 | 97人妻久久人人 | 国产精品人妻一码二码 | 精品国产亚洲人成在线观看芒果 | 国产成人av一区 | 国产丝袜女 | 国产日韩无码精品一区二区三区 | 加勒比东京热无码av在线 | 91精品国产免费久久 | 91九色国| av无码精品一区二区三 | 国产精品免费一区二区三区观看 | 国产无码一区二区三区动态 | 国产精品无码专 | av无码久久久久久不卡网站 | 91精品国产午夜福利在线观看 | 国产精品视频一区二区噜噜 | 国产偷窥女洗浴在线观看一区 | 国产一区二区三区av黄片 | 国产一区二区精品在线观看 | 国产精品毛片在线完整sab | 国产美女口爆吞精一区二区 | 国产精品玖玖资 | 国产精品一二三在线观看 | 国产av无码专区亚洲精品 | 国产成人av一区二区三区无码 | 国产精品在线就撸 | 国产黄色成人网站在线播放 | 国产精品免费一区二区三区四区 | 国产爆乳一区不卡在线 | 99久久伊人精品综合观看 | 国产午夜无码喷水福利在线观看 | 国产精品成人一区二区三区电影 | 国人精品视频在 | 91大神精品网站在线观看 | 午夜福利理论电影网 | 91麻豆精品国产综合久 | 国产日韩一区二区三区免费高清 | 国产精品动漫无码1区 | 国产免费一区二区视频麻豆 | 2025国产成人精品视频人 | 动漫精品一区二区三区视频 | 国产午夜三级一区二区 | 国产精品无码无卡毛 | 国产精品无码久久 | 91精品国产现在观看 | 加勒比无码中文字幕 | 国产女网红亚洲精品 | 国产精品毛片更新无码 | 91精品少妇高潮一区二区 | 成人国产亚洲日韩欧美亚州 | 白嫩少妇高潮喷水惨叫 | 国产成人无码av一区二区 | 国产午夜福利精品在线观看不卡 | 国产成人亚洲精品无码青app | 福利精品一区 | 囯产精品一区二 | 国产精品成人无码av毛片 | 国产一区二区免费不卡在线播放 | 国产韩国日本欧美在 | 国产精品码一区二区 | 99久久精品国产一区二区免费 | 国产制服丝袜一区二区三区 | 国产美女视频黄a全免费网站樱花 | 国产一区二区日韩欧美在线 | 91国语露脸精品国产 | 国产av亚洲精品ai换脸电影 | 91九色国产社区在线观看 | 国产色欲av一区二区三区麻豆 | 国产一区高清视频在线观看 | 国产精品兄妹在线观看麻豆 | 国产黄a三级三级三级 | 高潮毛片无遮免费高清 | aⅴ毛片免费观看 | 国产成人三级在线观看网址 | 国产波霸爆乳一区二区黄色 | 国产av无码片毛片一级流奶水 | 国产传媒果冻天美传媒 | 成人国产在线观看高清不 | 国产a久久精品一区二 | 国产毛片视频 | 国产精品九九在线播放麻豆 | 国产高潮流白浆喷水免费视频 | 国产按摩推油一区二区 | 国产偷伦视频免费观看 | 精品视频久久久久 | 国产毛片网站视频在观 | 国产成人a视频在线观看 | 18禁无码国内精品久久综合 | 成人午夜国产在线观看 | 国产精品国内免费一区 | 国产爆乳无码精品视频 | 国产一区二区三区不卡 | 国产成人精品久久免费看 | heyzo在线视频 | 成人无码精品一区二区在线 | 国产高清免费视频免费观看 | av免费无码在线观看 | 国产福利秒拍视频大尺度 | 国产超碰97人人在线 | 国产午夜不卡无码影院 | 精品无码在线看片基地 | 国产精品一区二区高清在线 | 国产欧美成人综合 | 国产成人精品亚洲日本 | av検索データベース | 国产精品美女视频 | 91成人国产综合久久精品九色 | 国产成人香蕉久久久久 | 99久久精品亚洲国产 | 国产精品无码久久久 | 国产麻豆精品免费视频 | 国产午夜精品美女免费大片 | 国产无码在线观看免费在线 | av无码中出一区二区三区 | 国产三级国产精品国产av | 成午夜精品一区二区三区 | 91精品第一国产综合精品 | 国产精品另类激情久久久免 | 国产精品成人无码一区二区 | 99久久伊人久久 | 国产在线拍揄自揄视频网试看 | 国产尤物av尤物在线观看 | 成人午夜性a一级毛片美女 成人午夜性a一级毛片免费 | 成人无码精品久久小说 | 国产亚洲一区二区手机在线观看 | 国产午夜福利综合区 | 国产91麻豆精品 | 国产精品毛片在线大全 | 成年永久一区二区三区免费视频 | 91狠狠色综合久久久夜色撩人 | 成年女人免费视频拍拍拍 | 国产一线视频在线看 | 69成人av在线播放 | 精品人妻丝袜av一区二区 | 国产精品女a色欲av色欲老师 | 91精品国产高清一区 | 91人妻中文字 | 18禁美女裸身无遮挡免费网站 | 国产麻豆精品入口在线观看 | 成人精品午夜无码免费视小黄人 | 国产精品欧美一区二区二区二区 | 成人免费v片在线观看 | 国产高清一区二区动漫 | 18禁午夜福利a级污黄刺激 | 国产肥熟女视频一区二区三区 | 国产av巨作丝 | 2025国产精品午夜久久 | 丰满大码的熟女在 | 国产a级毛片色咪味 | 国产精品无码直接看 | a级欧美片免费观看 | 国产精品日韩av在自线在免费 | 东京热久久精品视频 | 国产综合精品永久日韩一二三 | 国产精品99无码一区二区视频 | 极品粉嫩国产18尤物在线观看 | 国产欧美日韩中文字幕 | 国产成人精品一区二三区在线观看 | 成人亚洲a片v一区二区三区蜜月 | 成亚洲国产av综合精品无码黄一级 | 国产欧美日韩中文在线观看不卡 | 国产精品成人av在线观看春天 | 国99精品无码一区二区三区 | 国产成人精品高清国产三级 | 精品系列无码视频在线观看 | 国产精品香蕉人多人在线观看 | 91精品国产无线乱码在线观看 | 国产精品毛片无码 | 国产精品直播手机在线 | 国产在线视频在线观看 | 国产日韩精品中文字无码 | 国产无套粉嫩白浆在线 | 97人妻天天爽夜夜爽二区 | 不卡精品在线观看 | 国产精品系列在线播放 | 国产精品一级特黄a毛片 | 精品国产日韩久久91 | 福利在线一区二 | 国产人妻人伦精品无码.麻豆 | 白嫩美女在线啪视频观看 | 国产亚洲欧美一区在线观看 | 国产99久久九九精品免费 | 国产一区一级棒 | 国产午夜高清高清在线观看 | 国产欧美成人xxx视频 | 国产在线不卡人成视频 | 国产成人av一区二区三 | 国产一级美女户外自慰操穴α片 | 国产精品白浆在线观看免费 | 国产午夜精品理伦片 | 东京热无码av专区 | 精品少妇人妻aⅴ免费久久洗澡 | 国精产品一区一区三区糖心 | 国产三级精品在线观 | 国产猛男猛女超爽免费视频 | 国产99精品视频一区二区三区 | 高清无码一区二区 | 国产精品国三级国产av视色 | a级国产乱理伦片在线观看 a级国产乱理论片在线观看av | 国产精品毛片无遮挡高清 | 精品国产福利在线观看一区 | 国产精品日韩欧美制服 | 国产专区视频在线观看 | 国产麻豆一精品一av一免费软件 | 国产不卡视频一区二区三区 | 成人午夜高潮免费视频在线 | 精品无码三级在线观看完整版 | 国产高清精品亚洲一区二区三区 | 91福利国产门事件在线观看 | 国产欧美日韩综合精品一区二区三 | av色原在线观看 | 国产成人免费无庶挡视频 | 91国内揄拍国内精品对白 | 国产精品一区不卡 | 国产在线a视频 | 精品国产亚洲第一区二区三区 | 国产一区二区三区精品诱惑网站 | 91麻豆精品国产 | 国产欧美日韩综合一区在线观 | 91一区二区午夜免 | 国产一区二区在线视频播放 | 高清欧美日韩一区二区三区在线 | 99久久久国产精品免费牛牛 | 国内自产少妇自拍区免费 | 97人妻天天爽夜夜爽二区 | 国产在线观看在线播出 | 精品无码一区二区三区av | 韩国高清色www在线安全 | 2025国产精品自在自线 | 国产亚洲综合一区二区三区 | 国产极品熟女沙发内射av | 国产成人免费不卡在线观看 | 国产黑丝视频在线观看 | 潮喷失禁| 丰满人妻一区二区三区视频 | 国产欧美日韩综合在线 | 国产成人亚洲精品91专区高清 | 国产无套码aⅴ在线观 | 99久久国产亚洲综合精品 | 国产成人激情一区二区视频 | 国产黄色片在线免费观看 | 国产精品亚洲日韩av在线 | 国产精品丝袜熟女 | 精品国产日韩久久91 | 91麻豆最新国产网址 | 国产成人a在线观看网站站 国产成人a在一区线观看高清 | 国产成人愉拍免费视频 | 成人免费av一区二区三区 | 国产精品偷伦费观看 | 国内精品伊人久久久av高清影 | 成人无码电影一区二区三区 | 91久久国产成人免费观看资源 | 国产成人91精品视频 | 国产精品一区欧美日韩制 | 2025中文字幕在线观看 | 国产成人精品a视频免费福利 | 国产成年人免费在线观看 | 国产精品福利一区二区久久 | 91久久久精品人妻无码专区不卡 | 国产免费高清视频拍拍拍 | 成人国产综合一区二区在 | 国产精品视频第一页 | 国产无套内射普 | 成人h动漫在线播放本动漫 成人h精品动漫在线 | 国产aⅴ天堂无码一区二区三区 | 国产美女大量吞 | 2025国产精品视频网站 | 国产精品日韩av在自线在免费 | 二区三区高清电影 | 国产精品视频3p | 国产精品无码亚洲 | 国产成人免费a | 精品国产成人系列 | 国产一区二区三区观看 | 国产日韩一区二区精品在线播放 | 国产免费无遮挡美女 | 国产精品高潮呻吟久久av旡码 | 国产精品爆乳亚洲专区无码牛牛 | av无码国产在线观看岛国 | 国产一区亚洲专区 | 成人综合天天影院 | 国产自产精品一区二区三区 | 国产毛片不 | 91麻豆产精品久久久 | 国产在线高清视频无码 | 精品无人区乱码一区二区 | 国产人妻精品一区二区三区 | 国产精品无码一区二区三区在 | 国产精品毛片v一区二区三区 | 丰满女人又爽又紧又丰满 | 国产午夜场免费视频在线播放 | 国产在线视频一区二区三区98 | 国产av美女激情 | 精品无码一区二区三区电影婷婷 | 国产午夜福利免费不卡在线观看 | 国产高清在线观看av片麻豆 | 韩国免费a级作爱片在线观看 | 囯产精品视频一区二区三区99 | 91精品欧美在线观看免费 | 国产一区二区欧美丝袜 | 加勒比东京热无码av在线 | 国产偷窥盗摄一区二区 | 国产日韩激情综合一区 | 国产成人免费高潮激情视频 | 91午夜福 | 国产高清无码黄片亚洲大尺度视频 | 2025国产精品性爱 | 国产成人综合久久精品可下载 | 国产偷窥女洗浴在线观 | 国产成人av大片在线播放 | 国产三级观看久久 | 成人精品一区二区三区久久 | 国产国产成年在线视网站 | 国产精品秘麻豆免费版热议不断 | 国产三级精品久久 | 丰满人妻精品 | 国产av无码专区亚洲av蜜芽 | 精品无码av不卡一区二区三区 | 91麻豆 | 国产精品亚洲专区无码不卡 | 成人黄色一级高清视频 | 国产爆乳无码福利电影 | 国产午夜久久一区二区三区 | 国产女同无遮挡互慰高潮 | 18禁美女裸体网站 | 91在线国产直播在线 | 国产精品丝袜无码不卡一区 | 高潮欧美日本 | 国产放荡对白视频在线观看 | 国产在线不卡午夜精品2025 | 国产视频一区 | 精品成在人线aⅴ无码免费看 | 国产精品免费久久久久久久蜜桃 | 国产高清japanese在线播放 | 精品国色天香卡一卡二 | 国产成人无码视频 | 国产一级aⅴ无码毛片 | www国产精品内射老师 | 国产精品成人www视频 | av免费观看 | 国产在线精彩视频二区 | 国产精品亚洲w码日韩中文app | 成人国产一区二区 | 国产精品女同一区二区免费站 | 国产av.一区 | 国产成人一区二区三区综合区 | 韩亚洲欧美综合一区久久久久久 | 国自产拍在线视频天天更新 | 国产三级adc全集在线观看 | 精品人妻少妇一区 | 91精品国产亚洲爽啪在线观看 | 国产a精品一区二区乱码 | 911国产精品无码 | 国产福利精品久久蜜桃 | 国产成人福利网站 | av在线tt国产 | 国产精品wwwcom976con | 国产精品亚洲精品一区二区 | 岛国免费aⅴ在线观看 | 国产美女爽爽爽免费视频电影 | 精品97国产免费人成视频 | 国产女主播资源一区二区网站 | 精品人妻一区二区三区曰产乱码 | 精品国产系列av在线 | 国产免费人成视频在线观看 | 精品国产一区二区三区免费91 | 1024国产中文毛片基地 | 东京热heyzo无码专区 | 高清av熟女一区 | 国产精品无码一区二区在线观看 | 按摩艳片一区区在线播放 | 国产精品亚洲精品一区二区 | 成人在线免费毛片 | 高清在线一区二区高清在线观看 | 91成人无码免费一区二区尤物 | 国产欧美日本一区二区三区免费 | 国产偷伦精品视频 | 精品无人乱码一区二区三区日 | 国自产精品手机在线观看视 | av毛片在线播放 | 国产欧美日韩va另类在线播 | 国产在线视频欧美一区二区三区 | 91亚洲国产日韩欧美在线播放 | 国产在线观看精品一区二区三 | 丰满乱子伦无码专区 | 国产原创中文无码精品视频 | 高潮抽搐潮喷毛片在线播放 | 精品午夜福利免费在线观看 | 国产免费无遮挡 | 国产亚洲中文日 | 国产麻豆放荡av | 国产女同无遮挡互慰高潮视频 | 国产丝袜无码精品一区二区三区 | 国产无套内射毛片 | 99亚洲国产精品色一区二区三 | 91伊人色伊人亚 | 国产激情三级在线观看 | 18禁成人黄网站免费视频 | 91av一区| 国产精品偷窥熟女精品视频 | 97人妻碰碰碰视频 | 91国内在线观看视频 | 国产91丝袜在线观看 | 国产一区二区三区在线精品专区 | 国产人妖ts观看一区二区 | 国产精品毛片91 | 国产激情无码一区二区 | 国产精品不卡在线观看 | 国产成人精品久久综合 | 国产黑丝袜在线观看 | 国产a爽一区二区久久久 | 18精品爽国产白嫩精品 | 91午夜福| 国产频99热精品在线 | 91午夜福利国产在线观看 | a级毛片免费观看在线 | 国产精品调教视频一区 | 国内自拍视频在线 | 国产成人国产在线观看入口 | 国产99国产精 | 国产高清天天看在线 | 91大神精品全国在线观看 | 国产高清在线精品免费不卡 | 91精品国产免費人成网站 | 2025国产麻豆剧传媒免费 | 国产一区二区视频在线关看 | 国产精品成人免费福 | 国产不卡视频在线观看 | 国产亚洲三级在线视频 | a级国产乱理伦片在线观看 a级国产乱理论片在线观看av | 97精品国产自产在线观看永 | 国产a级一级淫片免费观看 国产a级综合区毛片久久国产精品 | 精品一区二区高清在线 | 精品精品国产高清a级毛片 精品精品国产高清a级毛片8 | 99久久人妻无码精品系列蜜桃 | 成人亚洲网站在线 | 国产成人影院在线观看 | 国产成人3p视频免费观看 | 国产在线精品午夜肉伦伦影院 | 国产高清精品一区 | av在线无毒免费观看 | 国产综合久久精品综合v无码 | 国产一区日韩二区欧美 | 国产aaa一区二区三区 | 国产蜜桃tv一区二区无码 | 国产二区视频在线播放蜜臀 | 91福利精品老师国产自产在线 | 国产午夜a级理论片在线播放 | 国产色片在线观看 | 精品国产999久久久免费 | 国产高清午夜人成在线观看 | 国精一二三区 | 国产91尤物在线观看互动交流 | 国产精品国产三级厂七 | 动漫洲国产精品无码专区2d | 国产免费午夜福利 | 1000部啪啪未满十八勿入免费 | 国产在线无码不卡 | av秋霞电影在线播放网站 | 国产一区二区三区清纯 | 国产高清在线精品一区不卡 | 99久久精品 | 国产精品国语自产 | 国产狂喷潮视频在线播放 | 国产精品午夜未成人免费观看 | 国产精品无码不卡一区二区三区 | 国产午夜羞羞小视频在线 | 精品视自拍视频在线观看 | 福利姬视频在线观看 | av天堂午夜精品一区二区三区 | 国产成人av片在线观看 | 国产美女裸体无遮挡免费视频 | 国产一区二区三精品久久久 | 国产综合亚洲欧美另类久久久精品 | 成人国产精品一级毛片视频毛片 | 国产蜜桃扣扣传媒av性色 | 高潮毛片无遮挡高清免 | 国产欧美亚洲中文字幕 | 国产精品美女在线观看 | 国产探花在线精品一区二 | 国产三级adc全集在线观看 | 99精品视频在线播放 | 国产精品国产三级国产普通话一 | 国内嫩模私拍精品视频 | 国产色欲av一区二区三区 | av无码专区一区 | 国产成人美女福利在线观看 | 国产av成人一区二区三区 | 国产萌白酱喷水视频在线播放 | 国产免费一区二区三区在线看 | 精品91自产拍在线观看二区 | 国产这里有精品视频 | 国产高潮抽搐在线观看 | 国产高潮抽搐翻白眼在线播放 | 国自产拍av在线天天更新 | 成人午夜电影在线播放网 | 91精品国产手机 | 国产精品偷窥熟女精品 | 国产福利91三级97伦色 | 国产日韩欧美另类在线 | 国产美女激情一二三区 | 911天堂国产在线观看 | 国产真实露脸精彩对白91 | 国产无码黄色视 | 97人妻无码公开免费视频 | 91久久久久无码国产精品一区99 | 东京热加勒 | 国产三级精品播放 | 国产精品嫩草影院一二三区入口 | 国产一区美女 | 91精品福利资源在线观看 | 91进入蜜桃臀在线播 | 91网红福利精品区一区二 | 国产精品免费a∨片在线观看 | 国产综合成人色产 | 国产福利片在线 | 国产一区二区三区免费看视频 | 国产成人免费在线视频 | 精品无人国产偷自产在线日本 | 国产毛片一区二区三区视频 | 海角社区国产精品伦子伦免费 | 国产美女被操 | 丰满熟妇大肉唇张开 | 成人国产综合 | 国产精品一级毛片无码老人 | 国产福利麻豆精品一区 | 国产爆乳美女娇喘呻 | 国产精品成人观看视 | 91在线| 国产精品一区二区白浆 | 国产精品亚洲欧美大片在线看 | 高清一区二区三区免费 | 国产精品国产三级国产av主播 | 91福利视频免费 | 国产福利一区二区 | 97人人妻人人爽 | 99精品热在 | 国产午夜亚洲精品不卡 | 国产精品女同在线调教 | 国产a级三级三级三级 | 福利精品第一导航 | 成人综合网站一区二区三区四区 | 国产欧美日韩在线综合 | 91综合中文字幕一区二区三区 | 东京热激情无码专区 | 国产一区内射最近更新 | 爆乳无码一区二区在线观看ai | 国自产拍视频在线无码 | 波多野结衣的av一区二区三区 | 国产成人免费在线播放 | 91亚洲自偷在线观看 | 精品国产v无码大片在线观看视色 | 国产一区免费视频 | 91久久精品无码一级毛片 | 精品熟女一区 | 黑人巨大欧美精品一区二区o | 精品人妻无码在中文字幕 | 国产在线播放线99视频大全 | 国产成人免费影片 | 国产av一区二区三区久久 | 国产精品国产三级国产av剧情 | 91麻豆国产高清产精品第一页 | 国产精品无码免费专区午夜 | 国产精品国产三级国产aⅴ9色 | 国产成人综合久久 | 91偷拍一区| 国产精品免费观看视频播放 | 国产综合久久精品推荐 | 国产高清在线精品一区免费 | 高清日韩精品一区二区三区 | 国产精品日韩亚洲一区二区 | 国产亚洲日韩欧美另类丝瓜app | 国产精品一线天在线观看 | 国产欧美日韩综合视频在线 | 国产三级片亚洲欧洲三级片a级 | 91伊人国产 | 国产免费无遮挡美女 | 国产三级在线播放放视频 | 国产高清美女一级a毛片久久 | 91九色精品国产自产精品 | 国产亚洲无线码一区二区 | 精品一区二区国产在线观看 | 2025国产在线 | av永久无码精品桃花岛知道 | 国产在线播放无码不卡 | 91尤物无码国产在线观看 | 国产成人精品久久免费动漫 | 国产亚洲欧美在线观看三区 | 国产精品亚洲伦理在线 | 国产精品一区二区久久乐下载 | 成人国产综合av片 | 国产av精品一区二 | 国产综合精品婷婷丁香五月 | 国产熟女乱子伦精品 | 国产一区二区三区av天堂 | 国产成人欧美亚洲日韩电影 | 国产高清美女一级a毛片久久 | 国产99久久久国产精品免费高清 | 成人一区二区免费中文字幕 | 国产在线无码精品麻豆不卡 | 国产精品免费视频一区二区三 | 国产精品一品道加勒比 | 国产高清一区二区三区视 | 成人夜色视频 | 国产精品福利片免费看 | 福利精品老师国产自产在线 | 国产女同玩sm调教在线观看 | 精品人妻无码一区二区三区视频 | 精品91一区二区三区 | 国产原创在线 | 99精品一区二区三区免费视频 | 成人一区二区免费中文字幕视频 | 岛国无码精品一区二区三区 | 国产精品无码无套在线 | 国产激情无码视频在线播放性 | 18禁超污无遮挡无码网址 | 动漫av成人无码精品网站 | 国产美女自慰喷水 | 国产av寂寞骚妇 | 国产精品无码午夜免费麻豆 | 久久精品一区二区三区无码 | 国产成人久久精品区一区二区 | 成人动作片在线观看 | 高清无码毛片在 | 成人无码av在线 | 91精品国产丝袜 | 国产精品一区二区三区99性 | 国产一区私人高清影院 | 成人小说亚洲一区二区三区 | 高清精品欧美三级 | 国产综合日本影视 | 国产精品情侣呻吟对白视频 | 成人精品鲁一鲁一区二区 | 国产精品午夜波多野结衣性色 | 2025精品国夜夜天天拍拍 | 国产成人aa精品一区在线播放 | 高潮流白浆潮喷在线播 | 99精品视频国产一区二区三区 | 国产成人精品影院狼色在线 | 精品日韩在线观看 | 国产午夜视频久久 | 成人色网站欧美大片在线观看 | 国产精品三级在线 | 精品久久免费一区二区三区四 | 成人免费www在线高清观看 | 国产午夜亚洲精品午夜鲁丝片 | 精品国产一区二区三国产 | 国产精品一区二区三区视频 | 国产精品白浆精子流水 | www国产精品内射 | 国模大胆无码私拍啪啪av | 国产欧美日韩免费 | 国产午夜福利电影在线观看 | 99精品久久毛片a片潘金莲 | 国产激情精品一区二区三区 | 国模无码一区二区三区不卡 | 精品视频午夜一区二区 | 国产精品视频系列专区 | 国产精品久久久久国产 | 国产做a爱免费视频在线观看 | 国产成人精品久久一区二区 | 精品久久无码中文字幕一区 | 韩国日本一区二区 | 国产精品va无码 | 国产成人麻豆精品午夜福利在线 | 国产福利精品一区二区无码 | 精品美内射 | 国产精品盗摄一区二区在线 | 高清亚洲日韩av国产精品成人无 | 潮喷失禁大喷水av无码 | 国产成人片一区二区三区白 | 国产午夜片无码区在线播放 | 国产自产拍精品视频免费看 | 精品少妇无遮挡毛片视频软件 | 国产成人禁片免费观看视频 | 精品亚洲aⅴ无码午夜在线观看 | 成人黄色网站视频色 | 精品国产专区不卡 | 国产一区二区三区在线视頻 | 精品国产v无码大片在线观看 | 国产91富婆在线观看91 | 国产午夜无码精品免费看性色 | 国产丰满美女a级毛片 | 国产成人无码不卡精品久久 | 国产精品爽爽va在线观看无码 | 2025午夜国产精品福利 | 黑人巨大无码中文字幕无码 | 国产成人涩涩屋视频在线 | 国产欧美日韩综合精品二区久久 | 另类亚洲欧美日本 | 国产4p精品观看 | 成人做爰免费a片视频二机片 | 超级香蕉97视频在线观看一区 | 亚洲综合色男人的天堂 | 国产精品爆乳在线播放第一人称 | 国产孕妇故爱a级高清片免费看 | 99精品欧美美女福到在线不卡 | 国产精品日韩电影制服丝袜 | 国产精品区av | 国产91欧美一区二区精品 | 国产精品爽爽久久久久久蜜臀 | 国产午夜精品久久久久精品电影 | 国产成人午夜高潮毛片 | 精品久久国产字幕高潮 | 国内精品久久人妻无码 | 91久久久无码国产精品免费 | 国产精品精品国内自产拍被发现 | 国产一级毛片大片大全 | 成人免费在线视频观看 | 99久久精品国产免费 | 国产精品欧美一区二区三区不 | 国产原创精品国产专区 | 国产一区二区在线午夜福利 | 国产成人精品免费视频大 | 国产精品福利成人午夜精品视频 | 国产成人精品必看 | 国产精品一v二v在线观看 | 国产免费午夜一区二区视频 | 岛国大片在线一区二区三区 | 国产成人a视频高清在线下载 | 精品国产髙清在线看国产毛片 | 精品国产免费第一区二区三区 | 91在线无码精品秘在线观看 | 国产成人精品在线 | 国产性感美女污污无 | 92国产福利一区二区三区 | 国产精品一一在线观看 | 成人无码精品1区2区3区免费看 | 成人无码h真人在线网站 | 2025国内精品久久久久精免费 | 白嫩无码人妻熟妇啪啪区 | 国产成人精品午夜二三区波多野 | 成人免费a级毛片无码片 | av喷水高潮喷水在线观看c | 高清无码免费黄色大全 | 丰满的女同学2 | 18禁成人黄网站免费观看久久 | 国产精品日本一区二区在线 | 国产高潮抽搐翻白眼在线播放 | 国产人一极精品视频 | 国产在线精品成人一区二区 | 国产在线自在拍91精品黑人 | 国产精品一级毛片在线不卡 | av手机看片高清 | 高潮流白浆潮喷在线播放视频 | 国产高清在线精品一区在线 | 国产成人女人在线观看 | 国产午夜精品一区二区三区不卡 | 国产福利免费看黄片 | 高潮喷水在线观看免费 | 国产午夜福利一区二区久久 | 国产熟女高潮精选 | 国产精品午夜福利不卡 | 成人午夜免费app | 国产三级在线现免费观看 |