《从零开始学Swift》学习笔记(Day 65)——Cocoa Touch设计模式及应用之选择器
原创文章,欢迎转载。转载请注明:关东升的博客
实现目标与动作关联使用UIControl类addTarget(_:action:forControlEvents:)方法,示例代码如下:
button.addTarget(self, action: "onClick:", forControlEvents: UIControlEvents.TouchUpInside)
其中的action参数"onClick:"事实上就是选择器(Selector)。
问题提出
任何能够将方法调用的绑定推迟到运行期,在编译时方法调用者不需要知道要调用的方法是什么,这个可以降低调用者与被调用者之间的耦合度,这样就语言就很灵活。在C语言在提供一种函数指针技术,Objective-C和Swift语言都提供选择器(Selector)类型,它是C语言函数指针的面向对象替代技术。
选择器在Cocoa和Cocoa Touch中的目标动作、通知和委托等模式中方法的调用实现的关键。
解决方案
Objective-C中选择器是SEL数据类型,使用@selector()语句调用,调用onClick:方法的Objective-C示例代码如下:
SEL selector = @selector(onClick:); [button addTarget:self action: selector forControlEvents:UIControlEventTouchUpInside];
Swift中虽然没有提供SEL数据类型,而是提供了Selector结构体,通过方法名字符串构建Selector实例,示例代码如下:
button.addTarget(self, action: Selector("onClick:"),
ÊforControlEvents: UIControlEvents.TouchUpInside)
通过选择器调用方法,关键是方法名字,它有一定规律的。穷其根本是源自于Objective-C多重参数方法命名规律。方法名的冒号暗示了方法名应该具有几个参数,下面我们看几个示例:
//选择器为"onClick:" func onClick(sender: AnyObject) { NSLog("onClick:") } //选择器为"onClick:forEvent:" func onClick(sender: AnyObject, forEvent event: UIEvent) { NSLog("onClick:forEvent:") } //选择器为"onClickWithExtSender:forEvent:" func onClick(extSender sender: AnyObject, forEvent event: UIEvent) { NSLog("onClickWithExtSender:forEvent:") }
出于数据封装的需要,我们会在方法前面加private,使其变为私有方法,代码如下。
private func onClick(sender: AnyObject) { NSLog("onClick:") }
但是这样方法在调用时候会出现如下错误:
unrecognized selector sent to instance 0x7f7f81499b10'
这个错误的意思是没有找到选择器所指定的方法,也就是没有找到onClick:方法。正确的做法是在方法前面添加@objc属性注释,这说明选择器是在objc runtime运行环境下调用的。
//选择器为"onClick:" @objc private func onClick(sender: AnyObject) { NSLog("onClick:") }
相关推荐
Swift编程语言以其强大的功能和易读性在iOS应用开发领域占据了一席之地,而CocoaTouch框架则是构建iOS应用程序的核心工具。本视频教程将引导您深入理解CocoaTouch,并逐步掌握开发iOS应用的关键技巧。 首先,Cocoa...
本书主要针对苹果的两大操作系统平台,即iOS和macOS,提供了丰富的实践经验和专业指导,帮助开发者在使用Cocoa、Cocoa Touch、Objective-C和Swift开发应用时实现最佳性能。 首先,Cocoa和Cocoa Touch是苹果为macOS...
在Cocoa框架中,设计模式扮演着至关重要的角色,它们为开发者提供了标准的解决常见问题的方法,提高了代码的可读性和可维护性。Cocoa基于Objective-C,这门语言支持面向对象特性,如消息传递、类别和协议,使得实现...
3. **Cocoa设计模式**:Cocoa遵循Model-View-Controller (MVC)架构模式,将应用程序分为模型、视图和控制器三个部分。理解MVC的原理和实践是Cocoa编程的关键。 4. **Interface Builder**:这是Apple的可视化设计...
《COCOA设计模式 完整版 中文版》是一本专为iOS开发者深度学习COCOA框架而准备的高级进阶书籍。COCOA,全称“Cocoa Touch”,是Apple开发的用于构建iOS应用的主要框架,它包含了Objective-C和Swift编程语言中的大量...
通过阅读本书,读者能够学会如何利用Swift语言,结合Cocoa和Cocoa Touch框架,创建适用于iPhone、iPad和Mac的应用程序。该书提供了大量实际案例,介绍了如何在真实世界场景中使用Swift语言进行编程,并通过实践练习...
3. **Cocoa设计模式**:学习Cocoa的 MVC(模型-视图-控制器)、MVVM(模型-视图-视图模型)和VIPER(视图-交互器- presenter-实体-路由)等设计模式。 4. **Cocoa Touch和AppKit**:了解iOS上的UIKit和macOS上的...
Cocoa Touch是iOS应用开发的核心组成部分,它是Apple为移动设备设计的一个框架,主要负责处理用户交互、图形界面和应用程序的基本结构。Cocoa Touch是从Mac OS X的Cocoa框架发展而来,经过优化以适应触摸屏操作和...
iOS 11 Programming Fundamentals with Swift Swift, Xcode, and Cocoa Basics 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
《iOS应用源码解析:netshade-Cocoa-Touch-Barcodes-dfde76f》 在iOS开发领域,源码是学习和理解技术的关键。"netshade-Cocoa-Touch-Barcodes-dfde76f.zip"这个压缩包包含了iOS应用的源代码,专门涉及到Cocoa Touch...
leetcode ...文件类型,然后将其转换为为应用程序设计的类。 Monshot - 应用程序存储有关人类历史上发生的每个月球任务的信息。 它显示有关任务本身以及宇航员的数据。 一切都存储为 JSON 文件。 练习乘法-
4. **Model-View-Controller (MVC)**:Cocoa和Cocoa Touch都遵循MVC设计模式,这是一种将数据模型、视图和控制器分离的设计思想,有利于代码组织和维护。 5. **Auto Layout**和Size Classes:用于在不同屏幕尺寸和...
《iOS应用源码解析——深度探索robin-cocoa-web-resource-8f47f25》 在iOS开发中,源码是理解应用程序工作原理的关键。"robin-cocoa-web-resource-8f47f25"是一个专门针对iOS应用的源码库,它包含了用于构建iOS应用...
Cocoa Touch是Apple iOS开发的核心组成部分,其主要的UI构建框架就是UIKit。UIKit提供了一系列的类和接口,用于创建和管理iOS应用的用户界面、处理用户交互以及进行系统级别的任务。在iOS开发中,开发者通常会用到...
iOS实例开发源码——cocoa-fluff-CoolrSwap-b590080.zip
通过阅读这本书,开发者不仅能了解到Cocoa中的设计模式,还能学习到如何在实际项目中灵活应用这些模式。书中可能还涵盖了模式间的组合和交互,以及如何根据项目需求进行模式选择和创新。掌握这些知识,对于成为一位...
Cocoa Touch for iPhone OS 3 (pdf 书及源代码) Join the gold rush to developing cool iPhone apps with this complete iPhone OS 3 developer’s guide. Professional developer Jiva DeVoe speaks your ...