美文网首页Swift开发学习
swift笔记(六)--传值

swift笔记(六)--传值

作者: Harry__Li | 来源:发表于2022-11-03 14:53 被阅读0次

在项目开发中,我们肯定会有传值的问题.简单学习下swift的传值

单例

单例是能在全局访问的实例.从我们第几次创建,到整个app生命周期结束时释放.
在swift中 创建如下

class PersonManger: NSObject {

    var age:NSInteger?
    static let shareinstance = PersonManger()
//    private override init(){}
}

age是单例的一个属性,当然这里也可以添加函数方法.

正向传值

把数据传递到跳转的下一个界面.

//跳转到第二个界面的时候 传递参数
func Forwardvalue(){
        
        let secVC = SecondVC.init()
        secVC.nameStr = "hello world"
        self.present(secVC, animated: true)


class SecondVC: UIViewController {

    var nameStr:String?
反向传值
  • 使用协议代理实现
    从第一个界面跳转到secondVC,然后secondVC界面返回给第一界面数据
    1.首先 我们要在secondVC界面定义协议,协议需要实现的方法
    2.持有协议
    3.协议函数返回的数据
protocol BackForwardDelegate {
    
    func backchuanzhi(index:NSInteger) ->Void
}
var delegate:BackForwardDelegate?

  if let testdelegate = delegate {
            testdelegate.backchuanzhi(index: 10)
        }

在第一界面当中 我们需要遵守协议
设置代理
实现协议中的方法

  /// 反向传值
    func backvalue(){
        
        let secVC = SecondVC.init()    
        //使用代理协议
        secVC.delegate = self
        
        self.present(secVC, animated: true)
    }
 func backchuanzhi(index: NSInteger) {
        print("协议传递的是:\(index)")
    }
  • 使用闭包实现
    swift中的闭包传值 和oc中的block传值是相似的
    secondVC中的代码如下
//声明闭包
typealias FirstBackBlock = (_ index:NSInteger) -> Void

var testBlock:BackBlock?
  if testBlock != nil {
            self.testBlock!(1)
        }

而在第一个界面中

et secVC = SecondVC.init()
        
        //使用闭包
        secVC.testBlock = { [weak self] (index:NSInteger) in
            
            print("反向传递过来的参数是:\(index)")
        }
通知传值

传递参数

NotificationCenter.default.post(name: Notification.Name(rawValue: "TestNoti"), object: self, userInfo: ["key" : "123456"])

接收参数

 NotificationCenter.default.addObserver(self, selector: #selector(notibtnclick(noti:)), name: Notification.Name(rawValue: "TestNoti"), object: nil)
 @objc func notibtnclick(noti:Notification){
        
        print(noti)
        
    }
//记得移除通知
 deinit{
   NotificationCenter.default.removeObserver(self)
    }

相关文章

  • OC与swift的数据传输

    简介 该项目主要介绍了oc与swift之间、swift内部几种常见的传值方式(属性传值、代码块传值、代理传值、通知...

  • 11.4页面传值

    //一、AppDelegate.swift // //AppDelegate.swift //页面传值 // //...

  • swift传值

    本文将介绍swift中的传值方式:属性传值、代理传值、闭包传值、通知传值本文将在两个VC之间进行传值:HomeVC...

  • OC和Swift比较

    OC与swift 1.协议 OC:主要用来传值 swift:不仅可以用来传值,swift中的协议可以定义属性方法,...

  • Flutter_嵌套APP

    flutter 代码块 swift 传值 原生 to flutter 传值 flutte to 原生 写在后面...

  • Swift界面传值

    Swift中界面传值的方法 主要有三种 1.代理传值2.闭包传值(即OC中的Block) 属性传值 代理传值 F...

  • iOS之传值

    在iOS中传值的方式有很多种方式,有最普遍的就是属性传值,代理传值,block传值等方式了。写了OC和swift的...

  • swift 代理传值

    swift中的代理传值跟oc中的用法基本一样,都是用于反向传值,这里假设a界面向b界面传值为正向传值,则: 在b界...

  • swift 代理传值 - 学习笔记

    比如我们需要在ViewController里实现HeadView的代理方法并且接收HeadView里传回来的值.那...

  • Vue组件间关系及六种传值方式

    前言: 六种传值方式为: 属性传值 $refs $parent 通知传值(广播传值) 本地传值 路由传值 在介绍组...

网友评论

    本文标题:swift笔记(六)--传值

    本文链接:https://www.haomeiwen.com/subject/iymytdtx.html