最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

對(duì) 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)和使用場(chǎng)景,結(jié)合Observable-Swiftgithub:https://github.com/slazyk/Observable-Swift講了半天貌似還沒有特別明白,故寫了個(gè)簡(jiǎn)易的實(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)測(cè)頁面滾動(dòng)的文章就介紹到這了,更多相關(guān)Swift 使用 Observe 監(jiān)測(cè)頁面滾動(dòng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Swift調(diào)用Objective-C代碼

    Swift調(diào)用Objective-C代碼

    目前Swift語言所編寫的應(yīng)用才剛剛可以使用Xcode 6 GM版本提交,而Objective-C作為蘋果的主開發(fā)語言存在了很多年了。目前尚無成熟的Swift庫可用,所以當(dāng)前編寫應(yīng)用可以說基本離不開調(diào)用Objective-C代碼的情況。
    2014-09-09
  • switch實(shí)現(xiàn)一個(gè)兩數(shù)的運(yùn)算代碼示例

    switch實(shí)現(xiàn)一個(gè)兩數(shù)的運(yùn)算代碼示例

    這篇文章主要介紹了switch實(shí)現(xiàn)一個(gè)兩數(shù)的運(yùn)算代碼示例,需要的朋友可以參考下
    2017-06-06
  • Swift編程中實(shí)現(xiàn)希爾排序算法的代碼實(shí)例

    Swift編程中實(shí)現(xiàn)希爾排序算法的代碼實(shí)例

    希爾排序是對(duì)插入排序的一種改進(jìn)版本,算法本身并不穩(wěn)定,存在優(yōu)化空間,這里我們來講一下希爾排序的大體思路及Swift編程中實(shí)現(xiàn)希爾排序算法的代碼實(shí)例
    2016-07-07
  • Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果

    Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果

    這篇文章主要為大家詳細(xì)介紹了Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Swift里的值類型與引用類型區(qū)別和使用

    Swift里的值類型與引用類型區(qū)別和使用

    這篇文章主要介紹了Swift里的值類型與引用類型區(qū)別和使用,本文講解了值類型與引用類型的區(qū)別、如何選擇類型、什么時(shí)候該用值類型、什么時(shí)候該用引用類型等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • 詳細(xì)講解Swift中的類型占位符

    詳細(xì)講解Swift中的類型占位符

    類型占位符是swift5.6中引?的?個(gè)新功能,在處理稍微復(fù)雜的通?類型時(shí),它可能真的很有用,這篇文章主要給大家介紹了關(guān)于Swift類型占位符的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 詳解Swift 結(jié)構(gòu)體

    詳解Swift 結(jié)構(gòu)體

    這篇文章主要介紹了Swift 結(jié)構(gòu)體的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-09-09
  • SpringBoot3.0集成Redis緩存的實(shí)現(xiàn)示例

    SpringBoot3.0集成Redis緩存的實(shí)現(xiàn)示例

    緩存就是一個(gè)存儲(chǔ)器,常用 Redis作為緩存數(shù)據(jù)庫,本文主要介紹了SpringBoot3.0集成Redis緩存的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Swift 4中一些實(shí)用的數(shù)組技巧小結(jié)

    Swift 4中一些實(shí)用的數(shù)組技巧小結(jié)

    這篇文章主要給大家分享了關(guān)于Swift 4中一些實(shí)用的數(shù)組技巧,文中通過示例代碼介紹的介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用swift具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Swift使用enum抹平數(shù)組元素差異實(shí)例詳解

    Swift使用enum抹平數(shù)組元素差異實(shí)例詳解

    這篇文章主要為大家介紹了Swift使用enum抹平數(shù)組元素差異實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11

最新評(píng)論

广平县| 双鸭山市| 宣城市| 铜鼓县| 滦平县| 黄大仙区| 宣化县| 建水县| 花莲县| 那坡县| 大庆市| 虹口区| 江西省| 个旧市| 永善县| 长岭县| 阿瓦提县| 鄂温| 普定县| 郧西县| 新密市| 仙桃市| 汕尾市| 雷波县| 乐山市| 新闻| 北海市| 台中县| 博湖县| 安徽省| 勐海县| 长治市| 峨山| 黑水县| 连山| 土默特右旗| 双牌县| 鹤庆县| 湖北省| 青岛市| 阿巴嘎旗|