老司机夜插-理伦理片-理伦片免费-理伦片免费观看-理伦片免费看-理伦日韩-理论福利片-理论片第一页-理论片电影-理论片理论

金喜正规买球

Swift編程語言中文教程(二十一):Swift協(xié)議

原創(chuàng)|使用教程|編輯:龔雪|2014-06-19 09:33:07.000|閱讀 4516 次

概述:本文為Swift編程語言中文教程第二十一部分,講解協(xié)議(Protocol),內(nèi)容包括:Swift協(xié)議的語法(Protocol Syntax)、屬性要求(Property Requirements)、協(xié)議類型(Protocols as Types)、協(xié)議的繼承(Protocol Inheritance)等。Swift是蘋果公司在WWDC2014發(fā)布的一門編程語言,與Objective-C相比,對學習新手比較友好。慧都控件網(wǎng)根據(jù)官方教程以及網(wǎng)上中文資源整理了Swift編程語言中文教程,希望幫助想要學習Swift的朋友,由于技術有限,可能有不足的地方,希望大家指正。

# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

相關鏈接:

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

Protocol(協(xié)議)用于統(tǒng)一方法和屬性的名稱,而不實現(xiàn)任何功能。協(xié)議能夠被類,枚舉,結構體實現(xiàn),滿足協(xié)議要求的類,枚舉,結構體被稱為協(xié)議的遵循者。

遵循者需要提供協(xié)議指定的成員,如屬性,方法,操作符,下標等。

協(xié)議的語法

協(xié)議的定義與類,結構體,枚舉的定義非常相似,如下所示:

protocol SomeProtocol {
    // 協(xié)議內(nèi)容
}

在類,結構體,枚舉的名稱后加上協(xié)議名稱,中間以冒號:分隔即可實現(xiàn)協(xié)議;實現(xiàn)多個協(xié)議時,各協(xié)議之間用逗號,分隔,如下所示:

struct SomeStructure: FirstProtocol, AnotherProtocol {
    // 結構體內(nèi)容
}

當某個類含有父類的同時并實現(xiàn)了協(xié)議,應當把父類放在所有的協(xié)議之前,如下所示:

class SomeClass: SomeSuperClass, FirstProtocol, AnotherProtocol {
    // 類的內(nèi)容
}

屬性要求

協(xié)議能夠要求其遵循者必須含有一些特定名稱和類型的實例屬性(instance property)或類屬性 (type property),也能夠要求屬性具有(設置權限)settable 和(訪問權限)gettable,但它不要求屬性是存儲型屬性(stored property)還是計算型屬性(calculate property)。

如果協(xié)議要求屬性具有設置權限和訪問權限,那常量存儲型屬性或者只讀計算型屬性都無法滿足此要求。如果協(xié)議只要求屬性具有訪問權限,那任何類型的屬性都可以滿足此要求,無論這些屬性是否具有設置權限。

通常前置var關鍵字將屬性聲明為變量。在屬性聲明后寫上{ get set }表示屬性為可讀寫的。{ get }用來表示屬性為可讀的。即使你為可讀的屬性實現(xiàn)了setter方法,它也不會出錯。

protocol SomeProtocol {
    var musBeSettable : Int { get set }
    var doesNotNeedToBeSettable: Int { get }
}

在協(xié)議中定義類屬性 (type property)時使用class前綴關鍵字,即使在結構體或者枚舉中類屬性是要求使用static前綴關鍵字:

protocol AnotherProtocol {
    class var someTypeProperty: Int { get set }
}

protocol FullyNamed {
    var fullName: String { get }
}

FullyNamed協(xié)議含有fullName屬性。因此其遵循者必須含有一個名為fullName,類型為String的可讀屬性。

struct Person: FullyNamed{
    var fullName: String
}
let john = Person(fullName: "John Appleseed")
//john.fullName 為 "John Appleseed" 

Person結構體含有一個名為fullName的存儲型屬性,完整的遵循了協(xié)議。(若協(xié)議未被完整遵循,編譯時則會報錯)。

如下所示,Startship類遵循了FullyNamed協(xié)議:

class Starship: FullyNamed {
    var prefix: String?
    var name: String
    init(name: String, prefix: String? = nil ) {
        self.anme = name
        self.prefix = prefix
    }
    var fullName: String {
    return (prefix ? prefix ! + " " : " ") + name
    }
}
var ncc1701 = Starship(name: "Enterprise", prefix: "USS")
// ncc1701.fullName == "USS Enterprise"

Starship類將fullName實現(xiàn)為可讀的計算型屬性。它的每一個實例都有一個名為name的必備屬性和一個名為prefix的可選屬性。 當prefix存在時,將prefix插入到name之前來為Starship構建fullName。

方法要求

協(xié)議能夠要求其遵循者必備某些特定的實例方法和類方法。協(xié)議方法的聲明與普通方法聲明相似,但它不需要方法內(nèi)容。

注意: 協(xié)議方法支持變長參數(shù)(variadic parameter),不支持默認參數(shù)(default parameter)。

前置class關鍵字表示協(xié)議中的成員為類成員;當協(xié)議用于被枚舉或結構體遵循時,則使用static關鍵字。如下所示: 像類屬性的要求一樣,協(xié)議中定義類方法時也總是使用class關鍵字,即使類方法在枚舉或結構體中實現(xiàn)時要求使用static關鍵字

protocol SomeProtocol {
    class func someTypeMethod()
}

protocol RandomNumberGenerator {
    func random() -> Double
}

RandomNumberGenerator協(xié)議要求其遵循者必須擁有一個名為random, 返回值類型為Double的實例方法。(我們假設隨機數(shù)在[0,1]區(qū)間內(nèi))。

LinearCongruentialGenerator類遵循了RandomNumberGenerator協(xié)議,并提供了一個叫做線性同余生成器(linear congruential generator)的偽隨機數(shù)算法。

class LinearCongruentialGenerator: RandomNumberGenerator {
    var lastRandom = 42.0
    let m = 139968.0
    let a = 3877.0
    let c = 29573.0
    func random() -> Double {
        lastRandom = ((lastRandom * a + c) % m)
        return lastRandom / m
    }
}
let generator = LinearCongruentialGenerator()
println("Here's a random number: \(generator.random())")
// 輸出 : "Here's a random number: 0.37464991998171"
println("And another one: \(generator.random())")
// 輸出 : "And another one: 0.729023776863283"

突變方法要求

能在方法或函數(shù)內(nèi)部改變實例類型的方法稱為突變方法。在值類型(Value Type)(譯者注:特指結構體和枚舉)中的的函數(shù)前綴加上mutating關鍵字來表示該函數(shù)允許改變該實例和其屬性的類型。 這一變換過程在實例方法(Instance Methods)章節(jié)中有詳細描述。

(譯者注:類中的成員為引用類型(Reference Type),可以方便的修改實例及其屬性的值而無需改變類型;而結構體和枚舉中的成員均為值類型(Value Type),修改變量的值就相當于修改變量的類型,而Swift默認不允許修改類型,因此需要前置mutating關鍵字用來表示該函數(shù)中能夠修改類型)

注意: 用class實現(xiàn)協(xié)議中的mutating方法時,不用寫mutating關鍵字;用結構體,枚舉實現(xiàn)協(xié)議中的mutating方法時,必須寫mutating關鍵字。

如下所示,Togglable協(xié)議含有toggle函數(shù)。根據(jù)函數(shù)名稱推測,toggle可能用于切換或恢復某個屬性的狀態(tài)。mutating關鍵字表示它為突變方法:

protocol Togglable {
    mutating func toggle()
}

當使用枚舉或結構體來實現(xiàn)Togglabl協(xié)議時,必須在toggle方法前加上mutating關鍵字。

如下所示,OnOffSwitch枚舉遵循了Togglable協(xié)議,On,Off兩個成員用于表示當前狀態(tài)

enum OnOffSwitch: Togglable {
    case Off, On
    mutating func toggle() {
        switch self {
        case Off:
            self = On
        case On:
            self = Off
        }
    }
}
var lightSwitch = OnOffSwitch.Off
lightSwitch.toggle()
//lightSwitch 現(xiàn)在的值為 .On

協(xié)議類型

協(xié)議本身不實現(xiàn)任何功能,但你可以將它當做類型來使用。

使用場景:

  • 作為函數(shù),方法或構造器中的參數(shù)類型,返回值類型
  • 作為常量,變量,屬性的類型
  • 作為數(shù)組,字典或其他容器中的元素類型

注意: 協(xié)議類型應與其他類型(Int,Double,String)的寫法相同,使用駝峰式

class Dice {
    let sides: Int
    let generator: RandomNumberGenerator
    init(sides: Int, generator: RandomNumberGenerator) {
        self.sides = sides
        self.generator = generator
    }
    func roll() -> Int {
        return Int(generator.random() * Double(sides)) +1
    }
}

這里定義了一個名為 Dice的類,用來代表桌游中的N個面的骰子。

Dice含有sides和generator兩個屬性,前者用來表示骰子有幾個面,后者為骰子提供一個隨機數(shù)生成器。由于后者為RandomNumberGenerator的協(xié)議類型。所以它能夠被賦值為任意遵循該協(xié)議的類型。

此外,使用構造器(init)來代替之前版本中的setup操作。構造器中含有一個名為generator,類型為RandomNumberGenerator的形參,使得它可以接收任意遵循RandomNumberGenerator協(xié)議的類型。

roll方法用來模擬骰子的面值。它先使用generator的random方法來創(chuàng)建一個[0-1]區(qū)間內(nèi)的隨機數(shù)種子,然后加工這個隨機數(shù)種子生成骰子的面值。

如下所示,LinearCongruentialGenerator的實例作為隨機數(shù)生成器傳入Dice的構造器

var d6 = Dice(sides: 6,generator: LinearCongruentialGenerator())
for _ in 1...5 {
    println("Random dice roll is \(d6.roll())")
}
//輸出結果
//Random dice roll is 3
//Random dice roll is 5
//Random dice roll is 4
//Random dice roll is 5
//Random dice roll is 4

委托(代理)模式

委托是一種設計模式,它允許類或結構體將一些需要它們負責的功能交由(委托)給其他的類型。

委托模式的實現(xiàn)很簡單: 定義協(xié)議來封裝那些需要被委托的函數(shù)和方法, 使其遵循者擁有這些被委托的函數(shù)和方法。

委托模式可以用來響應特定的動作或接收外部數(shù)據(jù)源提供的數(shù)據(jù),而無需要知道外部數(shù)據(jù)源的類型。

下文是兩個基于骰子游戲的協(xié)議:

protocol DiceGame {
    var dice: Dice { get }
    func play()
}

protocol DiceGameDelegate {
    func gameDidStart(game: DiceGame)
    func game(game: DiceGame, didStartNewTurnWithDiceRoll diceRoll:Int)
    func gameDidEnd(game: DiceGame)
}

DiceGame協(xié)議可以在任意含有骰子的游戲中實現(xiàn),DiceGameDelegate協(xié)議可以用來追蹤DiceGame的游戲過程。

如下所示,SnakesAndLadders是Snakes and Ladders(譯者注:控制流章節(jié)有該游戲的詳細介紹)游戲的新版本。新版本使用Dice作為骰子,并且實現(xiàn)了DiceGame和DiceGameDelegate協(xié)議

class SnakesAndLadders: DiceGame {
    let finalSquare = 25
    let dic = Dice(sides: 6, generator: LinearCongruentialGenerator())
    var square = 0
    var board: Int[]
    init() {
        board = Int[](count: finalSquare + 1, repeatedValue: 0)
        board[03] = +08; board[06] = +11; borad[09] = +09; board[10] = +02
        borad[14] = -10; board[19] = -11; borad[22] = -02; board[24] = -08
    }
     var delegate: DiceGameDelegate?
     func play() {
         square = 0
         delegate?.gameDidStart(self)
         gameLoop: while square != finalSquare {
             let diceRoll = dice.roll()
             delegate?.game(self,didStartNewTurnWithDiceRoll: diceRoll)
             switch square + diceRoll {
             case finalSquare:
                 break gameLoop
             case let newSquare where newSquare > finalSquare:
                 continue gameLoop
             default:
             square += diceRoll
             square += board[square]
             }
         }
         delegate?.gameDIdEnd(self)
     }
}

游戲的初始化設置(setup)被SnakesAndLadders類的構造器(initializer)實現(xiàn)。所有的游戲邏輯被轉移到了play方法中。

注意: 因為delegate并不是該游戲的必備條件,delegate被定義為遵循DiceGameDelegate協(xié)議的可選屬性

DicegameDelegate協(xié)議提供了三個方法用來追蹤游戲過程。被放置于游戲的邏輯中,即play()方法內(nèi)。分別在游戲開始時,新一輪開始時,游戲結束時被調(diào)用。

因為delegate是一個遵循DiceGameDelegate的可選屬性,因此在play()方法中使用了可選鏈來調(diào)用委托方法。 若delegate屬性為nil, 則委托調(diào)用優(yōu)雅地失效。若delegate不為nil,則委托方法被調(diào)用

如下所示,DiceGameTracker遵循了DiceGameDelegate協(xié)議

class DiceGameTracker: DiceGameDelegate {
    var numberOfTurns = 0
    func gameDidStart(game: DiceGame) {
        numberOfTurns = 0
        if game is SnakesAndLadders {
            println("Started a new game of Snakes and Ladders")
        }
        println("The game is using a \(game.dice.sides)-sided dice")
    }
    func game(game: DiceGame, didStartNewTurnWithDiceRoll diceRoll: Int) {
        ++numberOfTurns
        println("Rolled a \(diceRoll)")
    }
    func gameDidEnd(game: DiceGame) {
        println("The game lasted for \(numberOfTurns) turns")
    }
}

DiceGameTracker實現(xiàn)了DiceGameDelegate協(xié)議的方法要求,用來記錄游戲已經(jīng)進行的輪數(shù)。 當游戲開始時,numberOfTurns屬性被賦值為0;在每新一輪中遞加;游戲結束后,輸出打印游戲的總輪數(shù)。

gameDidStart方法從game參數(shù)獲取游戲信息并輸出。game在方法中被當做DiceGame類型而不是SnakeAndLadders類型,所以方法中只能訪問DiceGame協(xié)議中的成員。

DiceGameTracker的運行情況,如下所示:

let tracker = DiceGameTracker()
let game = SnakesAndLadders()
game.delegate = tracker
game.play()
// Started a new game of Snakes and Ladders
// The game is using a 6-sided dice
// Rolled a 3
// Rolled a 5
// Rolled a 4
// Rolled a 5
// The game lasted for 4 turns

在擴展中添加協(xié)議成員

即便無法修改源代碼,依然可以通過擴展(Extension)來擴充已存在類型(譯者注: 類,結構體,枚舉等)。擴展可以為已存在的類型添加屬性,方法,下標,協(xié)議等成員。詳情請在擴展章節(jié)中查看。

注意: 通過擴展為已存在的類型遵循協(xié)議時,該類型的所有實例也會隨之添加協(xié)議中的方法

TextRepresentable協(xié)議含有一個asText,如下所示:

protocol TextRepresentable {
    func asText() -> String
}

通過擴展為上一節(jié)中提到的Dice類遵循TextRepresentable協(xié)議

extension Dice: TextRepresentable {
    cun asText() -> String {
        return "A \(sides)-sided dice"
    }
}

從現(xiàn)在起,Dice類型的實例可被當作TextRepresentable類型:

let d12 = Dice(sides: 12,generator: LinearCongruentialGenerator())
println(d12.asText())
// 輸出 "A 12-sided dice"

SnakesAndLadders類也可以通過擴展的方式來遵循協(xié)議:

extension SnakeAndLadders: TextRepresentable {
    func asText() -> String {
        return "A game of Snakes and Ladders with \(finalSquare) squares"
    }
}
println(game.asText())
// 輸出 "A game of Snakes and Ladders with 25 squares"

通過擴展補充協(xié)議聲明

當一個類型已經(jīng)實現(xiàn)了協(xié)議中的所有要求,卻沒有聲明時,可以通過擴展來補充協(xié)議聲明:

struct Hamster {
    var name: String
    func asText() -> String {
        return "A hamster named \(name)"
    }
}
extension Hamster: TextRepresentabl {}

從現(xiàn)在起,Hamster的實例可以作為TextRepresentable類型使用

let simonTheHamster = Hamster(name: "Simon")
let somethingTextRepresentable: TextRepresentabl = simonTheHamester
println(somethingTextRepresentable.asText())
// 輸出 "A hamster named Simon"

注意: 即時滿足了協(xié)議的所有要求,類型也不會自動轉變,因此你必須為它做出明顯的協(xié)議聲明

集合中的協(xié)議類型

協(xié)議類型可以被集合使用,表示集合中的元素均為協(xié)議類型:

let things: TextRepresentable[] = [game,d12,simoTheHamster]

如下所示,things數(shù)組可以被直接遍歷,并調(diào)用其中元素的asText()函數(shù):

for thing in things {
    println(thing.asText())
}
// A game of Snakes and Ladders with 25 squares
// A 12-sided dice
// A hamster named Simon

thing被當做是TextRepresentable類型而不是Dice,DiceGame,Hamster等類型。因此能且僅能調(diào)用asText方法

協(xié)議的繼承

協(xié)議能夠繼承一到多個其他協(xié)議。語法與類的繼承相似,多個協(xié)議間用逗號,分隔

protocol InheritingProtocol: SomeProtocol, AnotherProtocol {
    // 協(xié)議定義
}

如下所示,PrettyTextRepresentable協(xié)議繼承了TextRepresentable協(xié)議

protocol PrettyTextRepresentable: TextRepresentable {
    func asPrettyText() -> String
} 

遵循``PrettyTextRepresentable協(xié)議的同時,也需要遵循TextRepresentable`協(xié)議。

如下所示,用擴展為SnakesAndLadders遵循PrettyTextRepresentable協(xié)議:

extension SnakesAndLadders: PrettyTextRepresentable {
    func asPrettyText() -> String {
        var output = asText() + ":\n"
        for index in 1...finalSquare {
            switch board[index] {
                case let ladder where ladder > 0:
                output += "▲ "
            case let snake where snake < 0:
                output += "▼ "
            default:
                output += "○ "
            }
        }
        return output
    }
}

在for in中迭代出了board數(shù)組中的每一個元素:

  • 當從數(shù)組中迭代出的元素的值大于0時,用▲表示
  • 當從數(shù)組中迭代出的元素的值小于0時,用▼表示
  • 當從數(shù)組中迭代出的元素的值等于0時,用○表示

任意SankesAndLadders的實例都可以使用asPrettyText()方法。

println(game.asPrettyText())
// A game of Snakes and Ladders with 25 squares:
// ○ ○ ▲ ○ ○ ▲ ○ ○ ▲ ▲ ○ ○ ○ ▼ ○ ○ ○ ○ ▼ ○ ○ ▼ ○ ▼ ○

協(xié)議合成

一個協(xié)議可由多個協(xié)議采用protocol<SomeProtocol, AnotherProtocol>這樣的格式進行組合,稱為協(xié)議合成(protocol composition)。

舉個例子:

protocol Named {
    var name: String { get }
}
protocol Aged {
    var age: Int { get }
}
struct Person: Named, Aged {
    var name: String
    var age: Int
}
func wishHappyBirthday(celebrator: protocol<Named, Aged>) {
    println("Happy birthday \(celebrator.name) - you're \(celebrator.age)!")
}
let birthdayPerson = Person(name: "Malcolm", age: 21)
wishHappyBirthday(birthdayPerson)
// 輸出 "Happy birthday Malcolm - you're 21!

Named協(xié)議包含String類型的name屬性;Aged協(xié)議包含Int類型的age屬性。Person結構體遵循了這兩個協(xié)議。

wishHappyBirthday函數(shù)的形參celebrator的類型為protocol&lt;Named,Aged>。可以傳入任意遵循這兩個協(xié)議的類型的實例

注意: 協(xié)議合成并不會生成一個新協(xié)議類型,而是將多個協(xié)議合成為一個臨時的協(xié)議,超出范圍后立即失效。

檢驗協(xié)議的一致性

使用is檢驗協(xié)議一致性,使用as將協(xié)議類型向下轉換(downcast)為的其他協(xié)議類型。檢驗與轉換的語法和之前相同(詳情查看類型檢查):

  • is操作符用來檢查實例是否遵循了某個協(xié)議。
  • as?返回一個可選值,當實例遵循協(xié)議時,返回該協(xié)議類型;否則返回nil
  • as用以強制向下轉換型。
@objc protocol HasArea {
    var area: Double { get }
}

注意: @objc用來表示協(xié)議是可選的,也可以用來表示暴露給Objective-C的代碼,此外,@objc型協(xié)議只對類有效,因此只能在類中檢查協(xié)議的一致性。詳情查看

class Circle: HasArea {
    let pi = 3.1415927
    var radius: Double
    var area:≈radius }
    init(radius: Double) { self.radius = radius }
}
class Country: HasArea {
    var area: Double
    init(area: Double) { self.area = area }
}

Circle和Country都遵循了HasArea協(xié)議,前者把area寫為計算型屬性(computed property),后者則把area寫為存儲型屬性(stored property)。

如下所示,Animal類沒有實現(xiàn)任何協(xié)議

class Animal {
    var legs: Int
    init(legs: Int) { self.legs = legs }
}

Circle,Country,Animal并沒有一個相同的基類,所以采用AnyObject類型的數(shù)組來裝載在它們的實例,如下所示:

let objects: AnyObject[] = [
    Circle(radius: 2.0),
    Country(area: 243_610),
    Animal(legs: 4)
]

如下所示,在迭代時檢查object數(shù)組的元素是否遵循了HasArea協(xié)議:

for object in objects {
    if let objectWithArea = object as? HasArea {
        println("Area is \(objectWithArea.area)")
    } else {
        println("Something that doesn't have an area")
    }
}
// Area is 12.5663708
// Area is 243610.0
// Something that doesn't have an area

當數(shù)組中的元素遵循HasArea協(xié)議時,通過as?操作符將其可選綁定(optional binding)到objectWithArea常量上。

objects數(shù)組中元素的類型并不會因為向下轉型而改變,當它們被賦值給objectWithArea時只被視為HasArea類型,因此只有area屬性能夠被訪問。

可選協(xié)議要求

可選協(xié)議含有可選成員,其遵循者可以選擇是否實現(xiàn)這些成員。在協(xié)議中使用@optional關鍵字作為前綴來定義可選成員。

可選協(xié)議在調(diào)用時使用可選鏈,詳細內(nèi)容在可選鏈章節(jié)中查看。

像someOptionalMethod?(someArgument)一樣,你可以在可選方法名稱后加上?來檢查該方法是否被實現(xiàn)。可選方法和可選屬性都會返回一個可選值(optional value),當其不可訪問時,?之后語句不會執(zhí)行,并返回nil。

注意: 可選協(xié)議只能在含有@objc前綴的協(xié)議中生效。且@objc的協(xié)議只能被類遵循。

Counter類使用CounterDataSource類型的外部數(shù)據(jù)源來提供增量值(increment amount),如下所示:

@objc protocol CounterDataSource {
    @optional func incrementForCount(count: Int) -> Int
    @optional var fixedIncrement: Int { get }
}

CounterDataSource含有incrementForCount的可選方法和fiexdIncrement的可選屬性。

注意: CounterDataSource中的屬性和方法都是可選的,因此可以在類中聲明但不實現(xiàn)這些成員,盡管技術上允許這樣做,不過最好不要這樣寫。

Counter類含有CounterDataSource?類型的可選屬性dataSource,如下所示:

@objc class Counter {
    var count = 0
    var dataSource: CounterDataSource?
    func increment() {
        if let amount = dataSource?.incrementForCount?(count) {
            count += amount
        } else if let amount = dataSource?.fixedIncrement? {
            count += amount
        }
    }
}

count屬性用于存儲當前的值,increment方法用來為count賦值。

increment方法通過可選鏈,嘗試從兩種可選成員中獲取count。

  1. 由于dataSource可能為nil,因此在dataSource后邊加上了?標記來表明只在dataSource非空時才去調(diào)用incrementForCount`方法。
  2. 即使dataSource存在,但是也無法保證其是否實現(xiàn)了incrementForCount方法,因此在incrementForCount方法后邊也加有?標記。

在調(diào)用incrementForCount方法后,Int型可選值通過可選綁定(optional binding)自動拆包并賦值給常量amount。

當incrementForCount不能被調(diào)用時,嘗試使用可選屬性``fixedIncrement來代替。

ThreeSource實現(xiàn)了CounterDataSource協(xié)議,如下所示:

class ThreeSource: CounterDataSource {
    let fixedIncrement = 3
}

使用ThreeSource作為數(shù)據(jù)源開實例化一個Counter:

var counter = Counter()
counter.dataSource = ThreeSource()
for _ in 1...4 {
    counter.increment()
    println(counter.count)
}
// 3
// 6
// 9
// 12

TowardsZeroSource實現(xiàn)了CounterDataSource協(xié)議中的incrementForCount方法,如下所示:

class TowardsZeroSource: CounterDataSource {
func incrementForCount(count: Int) -> Int {
        if count == 0 {
            return 0
        } else if count < 0 {
            return 1
        } else {
            return -1
        }
    }
}

下邊是執(zhí)行的代碼:

counter.count = -4
counter.dataSource = TowardsZeroSource()
for _ in 1...5 {
    counter.increment()
    println(counter.count)
}
// -3
// -2
// -1
// 0
// 0

標簽:Swift

本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn


為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產(chǎn)品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
中国国产一级毛片 | 人妻熟女一二三区夜夜爱 | 九九视频免费精品视频免费 | 中日韩精品卡一卡二卡3卡 中日文字字幕乱码视频 | 久99视频| 四虎影视出品必属精品 | 欲求不満の人妻松下纱荣子 | 无码天堂亚洲国产AV久久 | 精品国产三级在线观看 | 国产精品久久人妻无码网站蜜臀 | 精品久久伦理中文字幕 | 四虎影视最新的2024网址 | 手机久草视频分类在线观看 | 99精品久久秒播无毒不卡 | 国产精品久久久久久久久ktv | bl文H全肉| 日本三级观看高清免费 | 在线精品国产一区二区 | 欧美日韩精品一区二区三区高清视频 | 婷婷激情五月AV在线观看 | 2022色婷婷综合久久久 | 国产一级特黄在线播放 | 欧美黄a| 人妻被粗大猛进猛出69国产 | a级毛片基地 | 免费观看成人毛片A片2008 | 亚洲精品AV午夜一区二区三区 | 波多野结衣一区二区三区四区 | 中文乱码字幕视频观看网站免费 | 国产自产对白一区 | 精品视频在线观看 | 2020国产欧洲精品视频 | 欧美久久亚洲精品 | 午夜爱爱免费视频体验区 | 亚洲精品中文字幕无码A片老 | www.com毛片| 久久影院2024线观看 | 黄色日韩 | 99亚洲男女激情在线观看 | 91精品福利一区二区 | 久久精品国产亚洲欧美 | 日本欧美一区二区三区片 | 一本久久综合亚洲鲁鲁五月天 | 97精品国产高清自在线看超 | 极品少妇XXXX精品少妇偷拍 | 91国内视频| 直接看的成人无码视频网站 | 永久看免费bbbbb视频 | 小黄鸭app下载安装无限看丝瓜安卓苏州 | 国产精品原创永久在线观看 | 色爰情人网站 | 只要不是我老公1975 | 四房播播电影网 | 日韩城人网站 | 国精视频一卡二卡三卡四卡 | 国产乱子伦精品无码码专区 | 日本 一二三 不卡 免费 | 特级毛片绝黄A片免费播冫 特级毛片在线大全免费播放 | 狠狠躁天天躁小说 | 日本高清无卡码一区二区久久 | 国产精品 制服中字 在线视频 | 8x在线视频 | 日本午夜免费福利视频 | 婷婷 综合网站 | 狠狠色噜噜狠狠狠狠网站视频 | 日本视频一区二区 | 亚洲国产精品成人无码A片软件 | 公车冰块PLAY张开腿调教 | 国语对白精品 | 国产精品视频第一页 | 99久久国产综合精品女不卡 | 亚洲欧美一区二区三区图片 | 久伊人 | 美女内射视频WWW网站午夜 | 夜夜操com| 97国产精品人妻无码免费 | 国产精品久久久久久久久免费观看 | 宅男66在线网站 | 麻豆AV字幕无码中文 | 国产一级理论免费版 | 午夜伦理 | 日韩欧美中 | 好涨好爽好大视频免费 | 最新中文字幕在线视频 | 国产中文字字幕乱码无限 | 三级在线网址 | 六月丁香综合网 | 男人桶爽女人30分钟软件免费 | 在线三级网 | 两根巨龙在她腿间同时进出 | 在线看b| 天堂资源在线最新版 | 性欧美激情xxxd | 九九久久免费视频 | 女班长臭玉足踩踏榨精 | 欧美人人澡| 2024四虎www网址2 | 窝蝌蚪免费精品视频 | 有b吗在线视频 | 手机上免费看twitch的加速器 | 国产只有精品 | 18禁无遮挡羞羞污污污污免费 | 成人a动漫区| 欧美性xxxx极品hd欧美 | 99国产精品热久久久久久 | 亚洲日本va中文字幕区 | 精品黄色片 | 欧美日韩精品久久久免费观看 | 黑人vs亚洲美女在线观看 | 久久久久久九 | 精品视频| 2022国产成人精彩在线视频 | 99re热| 五月天丁香 | 一个人看的免费观看日本电影 | 国产无遮挡A片又黄又爽小说 | 欧美黑人巨大精品videos一 | 灌饱娇嫩H将军公主最新章节 | chinese18国产 | 欧美成人免费看片一区 | 午夜福利在线观看6080 | 日日摸人人拍人人澡 | 五月丁香合缴情在线看 | 无码人妻精品一区二区三区蜜臀 | 四虎影视最新免费观看 | 小明永久成人一区二区 | 国产一国产一区秋霞在线观看 | 色噜噜噜亚洲男人的天堂 | 999av| 亚洲巨乳巨臀在线一区二区BBW | 亚洲欧美日韩精品永久在线 | 中文字幕乱人伦视频在线 | 国内精品久久久久影院网站 | 久久综合偷拍无码 | 婷婷色青基地 | 最新国产精品自拍 | 国产二级一片内射视频播放 | 日韩精品一区二区三区中文3d | 99久久精品国产免看国产一区 | 亚洲国产系列久久精品99人人 | 国产午睡沙发系列大全 | 公车冰块PLAY张开腿调教 | 日韩黄色毛片 | 性小说在线观看 | 狠狠躁日日躁夜夜躁A片小说按摩 | 在线看a片| AV国产在线精品国自产在线 | 亚洲另类自拍 | 久久人人精品 | 少妇被多人C夜夜爽爽 | 久操精品视频 | 蝶恋直播www免费看 丁丁影院 | 国产日韩成人内射视频 | 天天狠狠弄夜夜狠狠躁·太爽了 | 中文字幕专区高清在线观看 | 欧美日韩国产一区二区三区不卡 | 免费在线视频一区 | 97任你碰任你摸任你爽 | 日韩美一区二区 | 国产激情在线 | 成年美女黄网站色大免费视频 | 久久影院国产 | 丁香婷婷影院 | 免费成人在线电影 | 无码成人AA片一区二区 | 亚洲精品免费网站 | 丰满人妻熟妇乱又伦精品劲 | 久久久久毛片免费观看 | 精品视频一区二区三三区四区 | 亚洲一卡2卡三卡 | 国产丰满人妻AV | 理论片午午伦夜理片2021 | 天堂在线www在线资源 | 久久精品国产一区二区三区四区 | 在线高清无码欧美久章草 | 日本内射精品一区二区视频 | 欧美午夜特黄AAAAAA片 | 久久99中文字幕伊人 | 日本久久久WWW成人免费毛片丨 | 精品久久久久久蜜臂a∨ | 大陆老太交xxxxxhd在线 | 下身被黑人猛然进入 | 中文字幕在线免费视频 | 最近最新中文字幕免费1 | 黑帮少爷爱上我第一季在线观看 | www国产亚洲精品久久网站 | 国产jizzjizz免费看麻豆 | 国产成人18黄网站在线观看网站 | 日本道专区无码中文字幕 | 免费网站色| 在线观看成人网站 | 好爽毛片一区二区三区色欲 | 四房播播 快播 | 欧日韩美香蕉在线观看 | 一区二区三区毛A片特级 | 999精品视频这里只有精品 | 久久免费看少妇高潮A片JA小说 | 内射后射亚洲国产巨乳 | 日本一卡二卡三四卡在线观看免费视频 | 曰本道久久综合久久爱 | 成人做爰视频WWW | 日本色网址 | 免费高清视频免费观看 | 日韩欧美一区二区三区在线播放 | 高清一区二区三区日本久 | 老师洗澡让我吃她胸的视频 | 精东视频影视传媒制作精品免费版 | 三级网络免费地址在线观看 | 五月天婷婷综合网 | 日韩欧美在线观看视频一区二区 | 亚洲图片欧美文学小说激情 | 国产伦亲子伦亲子视频观看 | 精品国产人妻国语 | 免费成人视频 | 亚洲精品久久无码AV片俺去也 | 高黄H文各种姿势PLAY道具1V1 | 久久亚洲精品国产精品黑人 | 精品国产香港三级 | 精品国产乱码久久久久APP下载 | 亚洲欧美日韩精品永久在线 | 午夜影院一区二区 | 最爽快的乱肉小说合集500篇 | 91精品一区二区综合在线 | 97蜜桃网站 | 两性午夜色视频免费网站 | 亚洲a级在线观看 | 国产亚AV手机在线观看 | 奇米四色影院 | 性a爱片免费视频性 | 7M精品福利视频导航 | 国产免费自拍 | 日本成本人片无码免费网站 | 亚洲成综合 | 性xxxx视频在线观看 | 爱福利视频一区 | 乱码AV午夜噜噜噜噜 | 免费观看全黄做爰大片 | 老司机福利在线视频 | 澳门在线高清一级毛片 | 狠狠色婷婷丁香综合久久韩国 | 老色69久久九九精品高潮 | 国产成人一级 | 国产精品久久久久久亚洲色 | 久久大香萑太香蕉av | 在线观看 有码 制服 中文 | 国产亚洲精品久久久久的角色 | 99热热久久| 色网站在线观看 | 精品蜜臀AV在线天堂 | 在线欧美一区 | 精品卡一卡三卡四卡乱 | 国精产品一区二区三区有限公司 | 亚洲 色 欧美 爱 视频 日韩 | 色综合久久久高清综合久久久 | 国产精品久久久久久久久 | 午夜久久久精品 | 经典国产乱子伦精品视频 | 妞干网在线观看 | 久久免费精彩视频 | 亚洲一级毛片免费观看 | 苍井空毛片精品久久久 | 欧美人妻一区黄A片 | 打开腿闺蜜用黄瓜让我爽 | 男子扒开美女尿口做羞羞的事 | 永久免费在线观看视频 | 国产精品反差婊在线观看 | 日本99久久九九精品无码 | avtom影院永久地址人人影院 | 亚洲人成综合在线播放 | 久青草国产手机在线视频 | 国产欧美在线手机观看 | 亚洲欧美日韩精品久久亚洲区 | huang色网站| 香港日本韩国三级网站 | 成人网站免费观看 | 2021国产成人精品久久 | 男女裸交无遮挡啪啪激情试看 | 色汉综合 | 波多野结衣在线视频免费观看 | 日韩中文字幕视频在线观看 | 国产成人精品久久久久婷婷 | 国产三级不卡 | 亚洲欧美日本综合 | 91小视频在线播放 | 新妺妺窝人体色WWW 性xxxxbbbb免费播放视频 | 久久国产vs | 四虎影视免费观看免费观看 | 黄色专区 | MAC水蜜桃色314麻豆 | 久久精品免视看国产成人2021 | 99r精品视频 | 男污女XO猛烈的动态图 | 爱啪网亚洲第一福利网站 | 我和岳疯狂性做爰全过程 | 国产成人福利免费观看 | 性生交大全免费看 | jizz亚洲| 国产女人喷潮视频免费 | 国产免费无码又爽又刺激A片动漫 | 亚洲AV成人无码久久精品A片 | 久久精品国产亚洲麻豆 | 国产玖玖在线观看 | 波多野结衣中文字幕在线观看 | 国产熟女精品高清在线 | 亚洲午夜无码毛片AV久久 | 91免费永久国产在线观看 | 国产亚洲精品hd网站 | 亚洲一区在线观看视频 | 日本理伦片午夜理伦片 | 久久99精品久久久久久国产越南 | 一区二区三区四区在线免费观看 | 99久热 | 国产伦亲子伦亲子视频观看 | 亚洲 欧美 唯美 国产 伦 综合 | 中国夫妻性生活片 | 在线免费自拍 | 女人在厨房被添高潮全过程A片 | 2015天堂网 | 黄色动态网站 | 色天使久久综合给合久久97色 | 日韩精品免费在线视频 | 精品国产九九 | 双色球23105晒票 | 国产成人资源 | 又硬又粗进去好爽A片欧美 又硬又粗进去好爽A片天美APP | 久久久久久国产a免费观看黄色大片 | 九九九视频| 丰满多毛少妇做爰视频爽爽和R | 束美阁影视传媒 | 99热在线获取最新地址 | 黄色的视频网站在线观看 | 成人h视频在线观看 | 素人约啪第五季 | 少妇内射视频播放舔大片 | 五月天婷婷免费观看视频在线 | 久久久久久a亚洲欧洲aⅴ | 国产精品久久久久久久久久98 | 欧美人成在线视频 | 五月婷婷丁香网 | 国内精品久久久久久久999下 | 久青草国产手机在线视频 | 欧美日产国产精选 | 一个人看的片在线WWW免费中文 | 免费大片黄国产在线观看 | 日本欧美精品 | 美女扒开让男人桶 | 国产性做久久久久久 | 午夜视频国产 | 国产精品69人妻无码久久久 | 色综合亚洲一区二区小说 | 无修无遮h韩漫视频网站 | 年轻的老师5理伦片 | 国产大片线上免费观看 | 欧美综合社区 | 久久久午夜精品福利内容 | h片在线观看 | 500第一精品福利导航 | 中国一及黄色片 | 九九在线中文字幕无码 | 嗯灬啊灬用力再用力翁公 | 久久精品爱国产免费久久 | 高清3d肉蒲团 | 秋霞伦理机在线看片 | 欧美一夜爽爽爽爽爽爽 | 最近韩国日本免费观看免费 | 伊人激情AV一区二区三区 | 成年午夜免费影院 | 国产另类ts人妖一区二区 | 美女69xxxxx的视频 | 丁香五月综合缴情月 | 国产又黄又猛又粗又爽的A片漫 | 一区二区三区美女视频 | 三级国产精品一区二区 | 精品国产乱码久久久久乱码 | 97精品久久久久中文字幕 | 国产AV无码熟妇人妻麻豆 | 最新国产中文字幕 | 久久自己只精产国品 | 狠狠色影院 | 苍井空快播 | 伊人大查蕉亚洲 | 九一视频免费看 | 久播播快播 | 国产又黄又爽又猛免费app | 久草成人在线视频 | 国产精品人成视频免费999 | 97超级碰久久久久香蕉人人 | 久久精品23 | 亚洲AV国产精品无码精 | 又粗又大内射免费视频小说 | 扛起老师雪白双腿进入小说 | 国产一级毛片潘金莲的奶头 | 成人亚洲精品久久久久软件 | 亚洲精品无码不卡在线播HE | 羞羞麻豆国产精品1区2区3区 | 冬月かえで | 老司机免费精品视频 | 国产又黄又爽又色视频免费软件 | 奇米777在线视频 | 国产精品久久久久无码人妻精品 | 国产JJZZJJZZ视频免费看 | 先锋影音波波资源网 | 国产日韩精品欧美一区视频 | 色爱区综合五月激情 | 九一精品| 最近更新中文字幕2018全集免费 | 动态图污动态 | 伦理网| 666西西人体做爰大胆图片 | 国产护士一级毛片高清 | 国产福利影院在线观看 | 国产xxxxxx久色视频在 | 亚洲第一成网站 | 天天干夜夜草 | 亚洲国产精品日本无码网站 | 国精一二二产品无人区免费应用 | 国产精品乱码色情一区二区视频 | 60岁老年熟妇在线无码 | 欧美操穴视频 | 日韩福利视频导航 | 嗯灬啊灬把腿张开灬A片视频网站 | 中文字幕日韩在线 | 婷婷在线视频国产综合 | 午夜福利理论片高清在线 | 三级日本高清完整版热播 | 日本高清成人 | 3D肉蒲团之极乐宝鉴8K影院 | 99久久亚洲精品日本无码 | 69国产视频| 国产妇少水多毛多高潮A片小说 | kdbacc app网站 | 波多野结衣 久久 | 婷婷在线免费视频 | 日本人妻仑乱少妇A级毛片潘金莲 | 伦理片飘花免费影院 | 亚洲 欧美 日本 国产 高清 | 樱花草视频在线观看免费资源WWW | 久久99热这里只频精品6 | 京野结衣免费一区二区 | 国内精品久久久久久不卡影院 | 国产精品免费拍拍1000部 | 精品久久久久中文字幕日本 | 久久99热只有精品2019app | 爱久久AV一区二区三区色欲 | 成人a毛片高清视频 | 四虎影音| 国产123在线观看 | 美女扒开尿道让男人捅 | 人妻激情综合久久久久蜜桃 | 国产精品久久久久久久人热 | 日本少妇浓毛BBWBBWBBW | 午夜毛片视频高清不卡免费 | 中文字幕色综合久久 | 国精品人妻无码一区二区三区性色 | 正能量免费网站WWW正能量免费 | 日韩免费一级a毛片在线播放一级 | 免费观看高清视频 | 五月天婷婷网亚洲综合在线 | 丁香五月亚洲春色 | 精品国产90后在线观看 | 2021国产成人精品久久 | 欧美v亚洲v国产v | 国产99久久久国产精品成人 | 久久久久久久综合日本亚洲 | 午夜射精日本三级 | 水蜜桃视频免费观看视频 | 日本无码精品一区二区三 | 泷泽萝拉第一部快播 | 亚洲精品一区二区三区福利 | 污网站在线免费看 | 在线观看国产精选免费 | 国产三级级在线观看大学生 | 久久99国产精一区二区三区 | 苍井空a v 免费视频 | 97视频免费在线 | 日本高清在线看片免费视频 | 综合色网站 | 国产乱对白精彩在线播放 | 国产另类ts人妖一区二区 | 色综合网站国产麻豆 | 乱色精品无码一区二区国产盗 | 国产精品国产三级国AV在线观看 | 国产精品久久久久久久久鸭 | 丰肥美熟欲妇乱小说 | 秋霞在线骑兵区 | 亚洲午夜在线播放 | 精品亚洲欧美无人区乱码 | 日日碰狠狠躁久久躁20247 | 无码强伦姧A片在线观看 | 欧洲无线码免费一区 | 久久精品无遮挡一级毛片 | 色婷婷色综合缴情网站 | 久久这里只有精品1 | 四虎精品成人影院在线观看 | 日本无码熟妇人妻在线视频免费看 | 国产精品伦理一区二区三区 | 欧美网色 | 在线观看免费a∨网站 | 99视频99| 日本大片免费视频在线 | 性欧美精品xxxx | 视频一区国产在线第一页 | 免播放器无码av网址 | 中文字幕在线最新在线不卡 | 外国成人网址 | 狂野欧美 | 我可以再往深处一点吗视频 | 无翼乌之全彩爆乳口工不知火舞 | 狠狠色丁香婷婷综合视频 | 日本A级作爱片金瓶双艳 | 伦理qvod电影 | 总有一天在线完整免费观看 | 日本a在线免费观看 | 亚洲国产精品久久久天堂 | 麻豆国产AV尤物网站尤物 | 国产特黄特色a级在线视频 国产素人自拍 | 亚洲国产AV一区二区三区四区 | 成都影院免费高清完整版 | 中文字幕日本无码电影 | 欧洲色情三级欧美三级视频 | 成人无码www免费视频欧美 | 老头把我添高潮了A片视频 另类老太婆BBWBBW | 野狼社区在线 | 国产真实老熟女无套内射 | 在线视频 日本 | 精品国产乱码久久久久久人妻 | 国产网曝门亚洲综合在线 | 国产成人一区二区 | 久久精品国产免费播放 | 乌龙院在线观看免费观看完整版 | 亚州毛色毛片免费观看 | 亚洲精品久久7777777 | AV国产AV亚洲AV天堂 | 国产99精品在线观看 | 8x拔播拔播8x免费视频 | 四虎www| 国产福利社区 | 久久视频在线视频观品15 | 三级在线观看中文字幕完整版 | 粗大的内捧猛烈进出少妇在线播放 | 色婷婷亚洲婷婷五月 | 中文字幕永久 | 永久免费不卡在线观看黄网站 | 极品少妇伦理一区二区 | 日韩高清不卡在线 | a级片在线观看 | 国产黄毛片 | WWW国产内插视频 | 国产情侣网站 | 日本国产美国日韩欧美mv | 99精品免费 | 日本视频高清一道一区 | 偷国精产品久拍自产 | 狠狠色噜噜狠狠狠888米奇 | 好吊色青青青国产在线播放 | 麻豆网 | 中国xxxx18免费 | 国产亚洲精品久久久久久久久动漫 | 日本亚洲欧洲另类图片 | 免费无码又爽又刺激A片涩涩在线 | 成年人网站在线免费观看 | 欧美黑人添添高潮A片视频 欧美激情无码成人A片 | 国精产品一二二区视早餐有限 | 亚洲精品aaa | 欧美一性一交一伦一A片视频 | 在线免费视频国产 | 久久久国产99久久国产久 | 最好韩国日本高清免费 | 精品国产高清毛片A片看 | 亚洲 综合 欧美在线 热 | 精东麻豆 | 综合在线 日韩欧美 中文字幕 | 成人亚洲国产综合精品91 | 国产精品久久久精品a级小说 | 中文字幕免费在线 | 中国农村自拍hdxxxx性自拍 | 亚洲の无码国产の无码步美 | 亚洲欧美日韩中文字幕久久 | 国产单亲乱子伦视频 | 青青草国产免费国产是公开 | 婷婷综合在线观看丁香 | 国产精品高清在线观看地址 | 亚洲国产精品综合久久2007 | 欧美XXXXX俄罗斯乱妇 | 欧美一区二区三区免费 | 最近最好看2019年中文字幕 | 午夜三级毛片 | 亚洲欧洲日韩极速播放 | 国产欧美日韩网站 | 久久一日本道色综合久久m 久久一日本道色综合久 | 欧美一级在线观看 | 自拍电影| 色噜噜狠狠色综合日日 | 国产午夜精品不卡视频 | 亚洲国产成人精品久久 | 国产精品久久久久无码AV1 | 日韩欧美视频一区二区在线观看 | 在线国产中文字幕 | 日日夜夜免费精品视频 | 亚洲成在人线中文字幕 | 在线视频网站你懂的 | 欧美日韩免费看 | 国产JIZZJIZZ免费看 | 日韩精品欧美激情亚洲综合 | 麻豆精品一区二正一三区 | 日韩欧美国产偷亚洲清高 | 高清在线精品一区二区 | 在线播放69热精品视频 | 日韩国产三级 | 美国一级毛片完整高清 | 黄色片网站在线观看 | 国产欧美精品一区二区三区-老狼 | 中国黄色网址大全 | 清冷将军被C把腿张开NP产 | 免费看成人A片无码网站 | 中文字幕无码日本欧美大片 | 亚洲 欧美精品 | 欧美日韩a级a | 嫩草影院地址一二三 | 污污免费网站 | 婷婷中文网 | 日b在线| 99久久精品视香蕉蕉er热资源 | 日本又色又爽又黄的A片在线电影 | 在线观看黄日本高清视频 | 97人伦影院A片在线观看 | 精品人妻伦九区久久AAA片 | 国产激情视频 | 五月综合色婷婷影院在线观看 | 九九99re热线精品视频 | 国产精品天天狠天天看 | 6080新视觉理论在线观看 | 久久狠狠色情网 | 久久高清免费视频 | 全古装一级毛片大全 | 天天躁日日躁狠狠躁欧美日韩 | 国产网友自拍视频 | 久草在在线免在线观看视频 | 无限观看韩国动漫免费观看大全 | 欧美午夜寂寞影院安卓列表 | oo0xxxx性欧美野外 | 在线电影网站免费 | 97色伦影院| 俺也来俺也去俺也射 | 日韩中文字幕在线观看视频 | 亚洲人成色20242024老人头 | 精品三级内地国产在线观看 | 麻豆精品国产精华精华液好用吗 | 古装一级毛片顶级 | 中文字幕亚洲码 在线观看 中文字幕无线观看在 | 娇喘潮喷抽搐高潮麻豆A片 娇喘呻吟欲仙欲死的娇妻 娇妻被朋友玩得呻吟在线电影 | 欧美性精品 | 日本午夜精品理论片A级APP发布 | 一级一片一_级一片一 | 99视频精品国产免费观看 | 国产一区视频在线免费观看 | 永久免费看MV网站入口亚洲 | 中文区中文字幕免费看 | 伊人中文字幕在线观看 | 亚洲一级大片 | a久久99精品久久久久久不 | brazzers欧美孕交 | 丁香婷婷综合五月综合色啪 | HEYZO高清中文字幕在线 | 99久久精品免费看国产一区二区三区 | 亚洲第一区第二区 | 一女被多男枪H又黄又激烈 一女多男np高辣文h | 天天操天天操天天操 | 在线看黄页 | 最新黄色在线 | 在教室伦流澡到高潮H吃奶小黄书 | 免费高清资源黄网站在线观看 | 午夜生活片| 国产精品玖玖玖影院 | 欧美国产亚洲一区二区三区 | 欧美激情久久久久久久大片 | 免费三级网站 | 高清不卡二卡三卡四卡无卡 | 男人的天堂中文字幕熟女人妻 | 黄网在线 | 色欲天天天综合网免费 | 小浪货你夹得我真紧 | 国产人妻精品一区二区三区不卡 | 日韩欧美 亚洲视频 | 亚洲另类自拍丝袜第1页 | 国产真实伦在线播放 | 国产日产欧产精品 | 香港aa三级久久三级 | 中文字幕日韩女同互慰视频 | 深夜福利网站在线 | 五月丁香国产在线视频 | 口工里番h本无遮拦全彩 | 久9视频这里只有精品试看 久草app黄 | 欧洲美女人 一级毛片 | 伊人久久精品午夜 | 国产精品xxxav免费视频 | 免费国产久久啪在线 | 久久国产色 | 秋霞影院精品久久久久 | 最新本道高清无码av | 日本永久免费 | 亚洲人成日本在线观看 | 熟女人妻一区二区三区视频 | 日韩亚洲国产中文字幕欧美 | 成人无码WWW在线看免费 | 伦理电影v男人天堂 | 色综合亚洲色综合网站 | 国产成人精品综合在线 | 亚洲AV无码专区A片奶水 | 亚州老熟女A片AV色欲小说 | 四房播播最新网址 | 亚洲欧美国产精品久久久 | CHINESETUBE国产在线观看 chinese熟女熟妇m1f | 狠狠地撸2015最新版 | 一个人看的视频观看免费高清 | 九九亚洲视频 | 蜜臀91精品国产免费观看 | 2019最新国产高清不卡a | 免费视频91| 色情污污污WWW网站下载 | 在线不卡日本v二区 w006.top | 久久99蜜桃精品久久久久小说 | 亚洲永久精品AV在线观看 | 日本youjizz | 国产老熟女伦老熟女熟妇图片 | 亚洲精品久久久久久成人 | 亚洲一级免费视频 | 国产中文字幕在线播放 | 九九这里只精品视在线99 | 澳门一级毛片手机在线看 | 国产第6页| 亚洲国产精品嫩草影院在线观看 | 中文字幕日本一区久久 | 亚洲免费网址 | 青青草久草视频 | 秋霞一区二区三区 | 视频一本大道香蕉久在线播放 | 日日摸夜夜添夜夜添高潮免费A片 | 日丰满肉唇大屁股熟妇图片 | 精品自拍视频在线观看 | 在线 亚洲 欧美 | 中出白虎 | 国产不卡在线视频 | 成午夜精品一区二区三区精品 | 国产精品99久久免费观看 | 日本精品中文字幕有码 | 2019精品国产品在线18年网 | 亚洲成人激情小说 | 久久福利一区 | 亚洲第一区精品观看 | 亚洲国产成人久久 | 日本视频在线 | 免费国产黄网站在线看品善网 | 国产一级久久免费特黄 | 美女被抽插舔B到哭内射视频免费 | 国产色欲一区二区精品久久呦 | 开心色播电影 | 亚洲色综合狠狠综合区 | 深爱五月开心网亚洲综合 | 国产精品手机在线观看 | 日韩AV免费一二三区视频 | 91小视频在线观看 | 色网站视频 | 中国三级毛片 | 狠狠综合久久综合88亚洲 | 精品99re66 | 强壮公次次弄得我高潮A片视频 | 夜夜狠狠操 | 日本在线视频网 | 日韩伦理电影在线免费观看 | 国产亚洲日韩精品激情 | 国产精品亚洲а∨天堂2021 | 撑 趴 润滑 痛苦 求饶 BL | 最近手机中文字幕大全首页 | 亚洲18在线天美 | 精品久久久无码人妻中文字幕边打电话 | 欧美一级欧美三级在线观看 | 影视AV久久久噜噜噜噜噜三级 | 日韩亚洲欧洲在线rrrr片 | 国产永久视频 | 国产福利萌白酱在线观看网站 | 在线视频精品免费观看10 | 欧美 国产 日韩 另类 视频区 | 快播av电影网站 | 久久久久久久性 | 亚洲亚洲人成综合网络 | 性饥渴的麻麻乱小说 | 婷婷激情久久 | 丁香花视频在线播放免费观看 | 毛茸茸的逼逼 | 中文精品字幕电影在线播放视频 | 成人在线看片 | 久久久国产高清 | 青青草成人费观看 | 囯产精品一品二区三区 | 欧美影院入口 | 性殴美高清视频 | 国内露脸少妇精品视频 | 国精品人妻无码一区二区三区性色 |