Swift纯Code之旅 Day15. 「页面传值?代理? Delegate?Protocol?(1)」

前言

我们已经完成了标签这个页面了,可以看一下再IPhone内这个页面的功能:

会将标签页面输入的值传回上个页面,那这边就会用到Protocol!

实作

网路上应该有很多Protocol的介绍了,分享一下我所理解的Protocol:

「请别的ViewController执行这个Protocol内的Function」

是不是有点太简单了XD,但我所理解的Protocol其实就这麽的单纯,
接下来用实作来理解一下Protocol吧!

首先先在AlarmLabelViewController(标签页面)中,新增一个Protocol,
该Protocol内有一个夹带String参数的Function。

protocol UpdateAlarmLabelDelegate: AnyObject {
    func updateAlarmLabel(alarmLabelText: String)
}

Protocol必须要写在ViewController的Class外面

接着再新增一个变数,存放该Protocol

weak var updateAlarmLabelDelegate: UpdateAlarmLabelDelegate?

可以看到Protocol後面有加Anyobject,Delegate变数前面有加weak,这边可以去看看「ARC」

到这边我们就建立完成Protocol了,接下来看看如何使用:
我们需要的功能是:「离开这个页面时,将输入框内的文字传送到前一页,并且显示」
因此我们可以在 ViewWillDisappear()内,实作这个Protocol内的updateAlarmLabel()

override func viewWillDisappear(_ animated: Bool) {
        
        if let text = alarmLabelTextField.text {
            
            if text == "" { // 若输入框内为空白,回传「闹钟」
                updateAlarmLabelDelegate?.updateAlarmLabel(alarmLabelText: "闹钟")
            }else { // 若输入框内不为空白,回传「输入框内的文字」
                updateAlarmLabelDelegate?.updateAlarmLabel(alarmLabelText: text)
            }
        }
    }

那到这边就设定完这个Protocol要做的事情了,明天再来完成谁要实作这个Protocol的部分!


<<:  【後转前要多久】# Day10 CSS - CSS常用属性I (文字、背景)

>>:  011-快捷键

Day29 - 总结推荐逆向资源

WannaCry 还没逆完,把最後一天的内容拿出来挡一下。请读者见谅XD 今天不会讲解技术,会推荐基...

(Day 20) Object.create 建立多层继承

上回介绍了如何使用建构式来建立原型,接着今天介绍使用 Object.create() 建立多层原型,...

【Day 10】Button Template 应用

今天我们来讲怎麽使用 Line Messaging API 的 Button Template 先送...

[Day 13] C#改造程序码( Func<T, TResult> )教学(下)

昨天稍微看了一下范例程序码是如何包装API的input+output参数型别 今天就来继续改造原本的...

Day 5:建立专案(三):专案档案架构

继续执行上一篇未完的流程,如下图,点选 Projucer 上方的 Xcode 图示(若左方的 Exp...