欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Swift 使用 Observe 監(jiān)測頁面滾動(dòng)的實(shí)現(xiàn)方法

 更新時(shí)間:2020年05月19日 11:00:57   作者:jackpu  
這篇文章主要介紹了Swift 使用 Observe 監(jiān)測頁面滾動(dòng)的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Swift 以前是通過addObserver來實(shí)現(xiàn)對某個(gè)屬性的變化監(jiān)聽,而最新的變化,書寫起開更加方便。

observer = test.observe(\.field, options: [.new, .initial]) { (object, change) in
   print(change)
  }

一定要用屬性賦值當(dāng)前的 observe 結(jié)果,沒有的話可能會(huì)造成 change 不生效。

對 UIScrollView 的滾動(dòng)監(jiān)聽,我們可以使用UIScrollViewDelegate

extension UIScrollViewDelegate{
 func scrollViewDidScroll(scrollView: UIScrollView){
  //do something
 }
}

這里推薦使用 Observe 比較方便的是可以進(jìn)行模塊的邏輯的拆分,我們只需在自己的組件里面進(jìn)行監(jiān)聽

class ComponetView: UIVIew {
	private var observation: NSKeyValueObservation?
	init(targetView: UIView) {
		observation = targetView.observe(\.contentOffset, options: [.new]) { [weak self] scrollView, change in
   // handle data contentOffset
  }
	}
}

附錄:Swift中實(shí)現(xiàn)Observable機(jī)制

今天給別人講個(gè)Observable的實(shí)現(xiàn)和使用場景,結(jié)合Observable-Swiftgithub:https://github.com/slazyk/Observable-Swift講了半天貌似還沒有特別明白,故寫了個(gè)簡易的實(shí)現(xiàn),講述了下Observable屬性監(jiān)控機(jī)制。

//: Playground - noun: a place where people can play

import UIKit
import Foundation

// MARK: - Observable
class Observable<T> {
  // 定義block結(jié)構(gòu)
  typealias Observer = T -> Void

  // 申明一個(gè)block,用于數(shù)據(jù)改變的執(zhí)行
  private var observer: Observer?

  // 數(shù)據(jù)發(fā)生變更,則通過observer告知
  var value: T {
    didSet {
      observer?(value)
    }
  }

  init(_ v: T) {
    value = v
  }

  func observe(observer: Observer?) {
    self.observer = observer
    observer?(value)
  }
}

// MARK: - People
struct PeopleModel {
  let firstName: Observable<String>
  let lastName: Observable<String>

  init(firstName: String, lastName: String) {
    self.firstName = Observable(firstName)
    self.lastName = Observable(lastName)
  }
}

// MARK: - Test

// test1
let people = PeopleModel(firstName: "sunny", lastName: "liu")
people.firstName.observe {
  newValue in
  print("firstName changed: \(newValue)")
}
people.lastName.observe {
  print("lastName changed: \($0)")
}
people.firstName.value = "sunny2"
people.lastName.value = "liu2"

// test2
class House {
  let lableHouseName = UILabel()

  init() {

  }

  var people: PeopleModel? {
    didSet {
      people?.firstName.observe{
        [unowned self] in
        self.lableHouseName.text = $0
      }
    }
  }
}

這樣貌似容易理解了,O(∩_∩)O哈哈~

總結(jié)

到此這篇關(guān)于Swift 使用 Observe 監(jiān)測頁面滾動(dòng)的文章就介紹到這了,更多相關(guān)Swift 使用 Observe 監(jiān)測頁面滾動(dòng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Swift中常量和變量的區(qū)別與聲明詳解

    Swift中常量和變量的區(qū)別與聲明詳解

    Swift語言同樣和Java和OC等語言一樣是同樣是需要聲明常量和變量的,下面就讓我們來學(xué)習(xí)一下Swift的常量和變量。這篇文章主要給大家介紹了關(guān)于Swift中常量和變量的區(qū)別與聲明的相關(guān)資料,需要的朋友可以參考下。
    2017-11-11
  • 深入解析Swift代理模式

    深入解析Swift代理模式

    委托(代理)是一種設(shè)計(jì)模式,它允許類或結(jié)構(gòu)體將一些需要它們負(fù)責(zé)的功能交由(委托)給其他的類型。下面這篇文章主要介紹了Swift代理模式的相關(guān)資料,文章開始先介紹了Objective-C相關(guān)的內(nèi)容,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • Swift 4最全的新特性詳細(xì)解析(推薦)

    Swift 4最全的新特性詳細(xì)解析(推薦)

    Swift 4 在 Swift 3 的基礎(chǔ)上,提供了更強(qiáng)大的穩(wěn)健性和穩(wěn)定性。所以下面這篇文章就來給大家總結(jié)介紹關(guān)于Swift4新特性的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-11-11
  • 因?yàn)橐粋€(gè)Crash引發(fā)對Swift構(gòu)造器的思考分析

    因?yàn)橐粋€(gè)Crash引發(fā)對Swift構(gòu)造器的思考分析

    這篇文章主要給大家介紹了關(guān)于因?yàn)橐粋€(gè)Crash引發(fā)對Swift構(gòu)造器的思考分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Swift具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Swift使用編解碼庫Codable的過程詳解

    Swift使用編解碼庫Codable的過程詳解

    Codable 是 Swift 引入的全新的編解碼庫,使開發(fā)者更方便的解析JSON 或 plist 文件,支持枚舉、結(jié)構(gòu)體和類,這篇文章主要介紹了Swift使用編解碼庫Codable,需要的朋友可以參考下
    2023-09-09
  • Swift語言實(shí)現(xiàn)地圖坐標(biāo)彈跳動(dòng)畫

    Swift語言實(shí)現(xiàn)地圖坐標(biāo)彈跳動(dòng)畫

    這篇文章主要介紹了用Swift語言實(shí)現(xiàn)地圖坐標(biāo)彈跳動(dòng)畫的方法主要應(yīng)用iOS7來實(shí)現(xiàn)此功能,需要的朋友可以參考下
    2015-07-07
  • Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解

    Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解

    這篇文章主要為大家介紹了Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Swift實(shí)現(xiàn)3D輪播圖效果

    Swift實(shí)現(xiàn)3D輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了Swift實(shí)現(xiàn)3D輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Swift教程之下標(biāo)詳解

    Swift教程之下標(biāo)詳解

    這篇文章主要介紹了Swift教程之下標(biāo)詳解,本文講解了下標(biāo)語法、下標(biāo)的使用、下標(biāo)選項(xiàng)等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Swift 3.0將UILabel數(shù)字顏色設(shè)置為紅色的方法

    Swift 3.0將UILabel數(shù)字顏色設(shè)置為紅色的方法

    這篇文章主要介紹了關(guān)于在Swift中將UILabel數(shù)字顏色設(shè)置為紅色的方法,文中給出了詳細(xì)的示例代碼,相信對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03

最新評論