iT邦幫忙

2022 iThome 鐵人賽

DAY 20
0
Mobile Development

從零開始的Swift開發心路歷程2系列 第 20

【從零開始的Swift開發心路歷程2-Day20】Combine(2)- Combine小練習

  • 分享至 

  • xImage
  •  

昨天講完了如何在UIControl Event新增Publisher,今天就來做個小練習,讓label的文字等於我在textField內輸入的值吧!
首先,在你的ViewModel內import Combine,宣告AnyCancellable用於取消訂閱流程,還有label的text。

import Foundation
import Combine

class MainViewModel{
    var uiObservers = Set<AnyCancellable>()
    var text :String = ""
    
    func setLabelText(text:String){
        self.text = text
    }
}

而在View裡面,必須先宣告他的ViewModel

var mainViewModel = MainViewModel()

再來就是利用昨天說到的UIControl Event Publisher去監聽事件

func bindingUIControlEvent(){
    //開始編輯TextField時,按下空白鍵會收起鍵盤
        myTextField.publisher(for: .editingDidBegin).sink{
            [unowned self] _ in
            addGestureRecognizer()
        }.store(in: &mainViewModel.uiObservers)
        
    //監聽TextField內的文字,將其傳至ViewModel
        myTextField.publisher(for: .editingChanged).sink{
            [unowned self] _ in
            mainViewModel.setLabelText(text: myTextField.text!)
        }.store(in: &mainViewModel.uiObservers)
        
    //按下按鈕後,Label的文字變成ViewModel存的值
        button.publisher(for: .touchUpInside).sink{
            self.label.text = self.mainViewModel.text
        }.store(in: &mainViewModel.uiObservers)
    }

如此一來小小實作就完成囉!
剛開始接觸Combine時可能會不太懂要如何起手,可以透過這類的小練習去理解其中的概念,熟能生巧,相信你各位也可以的!


上一篇
【從零開始的Swift開發心路歷程2-Day19】Combine(1)- Custom publisher in UIControl
下一篇
【從零開始的Swift開發心路歷程2-Day21】如何在Swift中呼叫C函式
系列文
從零開始的Swift開發心路歷程230
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言