首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

成为一名优秀 Swift 开发人员 10 个小技巧

重构并提高可性 Xcode 11 对重构功能做了很大改进。新 Xcode 重构操作更加简洁,让我们可以很容易重命名、引用和方法。已不记得有多少次认为一个名称是合适,而后来又决定修改。...使用扩展并合理使用它们创建公共库 很喜欢 Swift 扩展。在使用 Objective-C 时,总是不情愿地使用继承。当然这并不总是错误,正确使用子类也不会出错。...但是 Swift 扩展可以轻松地将简单方法集成到通用上,而无需做任何复杂事情。...在开发文档中,通知是在控制器与模型或服务之间实施通信可同步模式正确方法,在项目中经常使用 Notification Center,基本上实现了观察者模式,并应用程序带有更多响应式元素。...此外,在 UI 元素上使用 tag 标识它们,而不是使用其标题或其它内容区分。 结论 没有提到所有基本 OOP 原则。显然,您必须以正确方式实现,封装,抽象和设计模式。

2.3K40

iOS开发之 Method Swizzling 深入浅出

我们会想到下面的一些方法: 手动添加 直接简单粗暴在每个控制器中加入统计,复制、粘贴、复制、粘贴... 上面这种方法太Low了,消耗时间而且以后非常难以维护,会后面的开发人员骂死。...继承 我们可以使用继承方式解决这个问题。创建一个基,在这个基中添加统计方法,其他都继承自这个基。 然而,这种方式修改还是很大,而且定制性很差。...如果多次调用了[super load],可能会出现“Swizzle无效”假象,原理见下图: [dos2ufzkl1.png] Swift 自定义中使用 Method Swizzling 要在 Swift...) 注:对于 Swift 自定义,因为默认并没有使用 Objective-C 运行时,因此也没有动态派发方法列表,所以如果要 Swizzle Swift 类型方法的话,是需要将原方法和替换方法都加上...再注:下面这个例子使用了 Objective-C 动态派发,对于 NSObject 子类(UIViewController)是可以直接使用,并不是 Swift自定义,因此没有加 dynamic

2.4K70
您找到你想要的搜索结果了吗?
是的
没有找到

架构之路 (七) —— iOS AppSOLID原则(一)

这两种情况都使用了大量重复代码——必须有更好方法! 一种选择是定义一个单一数据源,它使用一系列日期获取条目,然后有一个单一视图显示这些条目。...此外,重命名其中匹配文件名。 要让 Xcode 完成所有工作,请打开 DailyReportsDataSource.swift并右键单击名。...重命名文件中匹配文件名: struct ExpensesView: View { 如果上面没有选择使用 Xcode 重构能力,请将 dataSource 类型更改为 ReportsDataSource...对于这个应用程序,你需要做就是 saveEntry(title:price:date:comment:)返回一个布尔值确认它是否保存了该值。...另一个可以改善您编写应用程序方式有趣概念是Defensive Programming。 这是关于代码预测可能会出错地方,这样您应用程序就不会脆弱,并且在收到意外输入时不会崩溃。

4.7K10

iOS 9 Storyboard 教程(二上)介绍Segue静态单元格(static cell)

在第一篇文章第一篇文章中,你已经学到了Interface Builder基本用法创建和连线多个控制器,以及使用在storyboard中可以通过直接创建自定义tableViewCell....,选择Add Player控制器.在Identity inspector设置它Class为PlayerDetailsViewController.总是忘记这至关重要一步,所以确保你没有忘记;后面还会指出...现在你可以创建最终unwind segue了.在PlayersViewController.swift(而不是detail控制器)末尾添加unwind 方法: @IBAction func cancelToPlayersViewController...之后,Xcode将添加这个属性到PlayersDetailViewController里而且会和storyboard相连: 在表单元格里创建视图连线正是所说你不应尝试用原型单元格,而用静态单元格是可以...打开PlayerDetailsViewController.swift并且删除所有从下面开始行(除了大括号): // MARK: - Table view data source 运行app然后检查带有静态单元格控制器

3.2K10

Swift开发:自定义标签栏UITabBarController (Swift项目开始第一步)

在总结了一些基本用法之后,尝试使用Swift自定义UITabBarController和UITabbar,开启这Siwft项目的关键一步,首先展示一下效果图: ?...中Main,因为我们要使用纯代码方式创建标签栏控制器,系统自带Main.StoryBoardxib形式界面我们并不需要。...第三步:创建视图控制器 自定义导航控制器和视图控制器,并且创建三个继承于BaseViewController视图控制器(因为没有过多复杂操作,这里省略代码),为之后创建标签控制器做准备。...rootViewController = MainTabBarController(); return true } 总结:以上就是在OC代码基础上,使用Swift自定义标签控制器方法和步骤...在项目前期我们以自定义方式创建标签栏,这也是为了后期应对更加复杂需求做伏笔,比如增加新控制器我们只需要修改plist配置文件属性创建相应视图控制器就可以,这样就避免了修改大量代码。

3.9K70

XcodeXcode 9 全新功能您会喜欢工具。内建 Interface BuilderXcode IDE

有了全新强大重构任务,现在您能迅速地完成 Swift, Objective-C,甚至用户界面文件上变量重命名。...基于 Swift 4 兼容性,Xcode 9 使用同一个编译器构建已有的 Swift 3 代码和最新 Swift 4 代码。从此,数据迁移节奏,您说了算。...结合标签,您可以为自己编辑、设计、构建或调试任务创建自定义工作环境。自定义行为还可通过单一组合键,彻底重新排列您窗口。 代码段 代码段库中有数十种预配置代码实现方式,比如定义新或方法。...Xcode 包括以下 Storyboard 控制器: 表格视图控制器 集合视图控制器 导航控制器 标签栏控制器 页面视图控制器 GLKit 视图控制器自定义 Assistant 编辑 Storyboard...Apple Event Bridge 您使用与 AppleScript 相同消息架构命令并查询由 Objective-C、Ruby 和 Python 等更多语言构建 app。

8.3K30

202 - Swift 核心是什么?

直到去年,也就是16 年,在 2.2 版本出来之后,感觉 Swift 还算比较稳定了,才决定使用 Swift 开发一个简单项目,当时决定模仿一个 app 练手,也就是现在在 github 上那个项目了...是的,这也是我们该思考问题,这里不会太着重去介绍 Swift 基础,因为默认看我视频同学都已经掌握了 Swift 基础了,所以关于 protocol 概念也不在详细介绍了,回到我们刚才问题...NSObject ,也就是说都是 class 类型,比如在开发中有几十个控制器都继承自某个自定义,就会把基所有的方法也继承下来,但是这些方法对每一个子类都有用吗?...所以这样就引出了 protocol,自己实现自己所要遵守 protocol,这里并不是某一个 class,这里指的是有那么几个 class 都要实现功能时候,选择用 protocol...当我自定义 UIView 时候, view 从 xib 加载,那么就需要在每个里都写一个从 xib 加载方法,如下代码: static func classMethodCreateView

94620

Swift 项目 - Xib | StoryBoard 多人协作技巧

对于逻辑复杂VC,应添加Object对象,并绑定相应分离逻辑代码。...对于自定义视图,应使用@IBDesignable关键字保障在在Storyboard上所见即所得!...与其说StoryBoard 和 Xib 隐藏了UI细节,倒不如说苹果是希望通过他们引导开发者正确使用 视图 和 控制器 ,他们创建视图实例时候都是通过 required init?...简直不敢相信自己眼睛,而且差距这么大一定是有什么神奇事情发生,为了验证想法,又将Storyboard创建复制了一次 var controllers:[ViewController...,随着次数减少,Storyboard创建速度逐渐低于存代码创建,但单次耗时仍然低于万分之一秒,这种效率是不会用户有任何感知,何况重复创建比纯代码还有优势,因此,这一条也不算StoryBoard

2K20

Swift:静态工厂方法

同样,这是许多开发人员选择子类化并创建内置视图自定义变体地方,就像这里UILabel一样,我们将使用它渲染标题: class TitleLabel: UILabel { override...特别是如果与"Swift:将子视图控制器用作插件" 中便捷API稍加修改版本结合使用,我们现在可以在执行异步操作时轻松添加预先配置加载视图控制器: class ProductListViewController...通过命名上述工厂方法makeStub,我们还可以清楚地知道此代码仅用于测试,因此将来不会意外将其添加到我们主要应用程序目标中。...如果您想了解有关此类对象以及通常使用工厂模式其他方式更多信息,请查看"Swift:使用工厂模式以避免共享状态","Swift:使用工厂进行依赖注入"和"Swift: 使用懒加载属性"。...文章来自 John SundellStatic factory methods in Swift简单翻译了一下,希望对大家有用 附: 文中静态工厂方法swift5.0才支持 我们也可以使用方法实现类似功能

2.4K10

一文读懂Xcode 9 所有更新:全新模拟器,兼容Swift低版本等

代码重构功能增强 这次 Xcode 9 对代码重构功能有较大提升,首先是重命名功能,在编辑器中点击名,然后选择 Refactor -> Rename: 这时,重命名预览界面会直接显示在编辑器中:...Rename 这个功能说起来是很常用一项,自己就经常使用。...可惜 Xcode 前几个版本对 Swift 支持不好,在开发 Swift 项目时只好手动做 Rename,这次终于算是解决了,并且还提供了更好体验。...另外,这次 Xcode 9 还解决了重命名Swift 语言中一个老问题,就是: 常用 Swift 同学应该都知道这个,以前版本 Xcode 不支持 Swift 语言重命名操作。...新 Xcode 还提供了快捷菜单,按住 Cmd 键, 再点击相应变量或者名,就会弹出快捷菜单: 快捷菜单中,提供了诸如重命名,转到定义,快速提示这些操作。

1.8K70

深度学习图像识别项目(下):如何将训练好Kreas模型布置到手机中

现在,你需要一个经过训练,序列化Keras模型文件转换成CoreML(Xcode兼容)文件。这可能是。 如果你选择使用自己自定义模型,则需要检查CoreML文档以确保支持你在网络内使用层。...是一名计算机视觉+深度学习专家,并不是应用程序开发人员 坦白说:不是一名移动应用程序开发人员(而且不会声称自己是)。...注意: 为了Pokedex应用程序能够识别相机是面对是“日常物品”还是神奇宝贝,添加了一个名为“background” (这样做目的是消除误报)。...真长,人回想起在Java编程日子! 在这门课上,我们首先要定义一个 UILabel ,它将保存我们标签和相关性概率百分比文本。 16-23行处理这一步骤。...尽管Swift不像Python那样简单(在此,为防止个人偏见,持保留态度),但鉴于CoreML非常简单,你可以很省力仿造这个项目构建你自己应用程序。

5.3K40

Swift 中风味各异依赖注入

基于属性 虽然基于初始化器依赖注入通常很适合你自己自定义,但有时当你必须从系统继承时,它就有点难用了。...一个例子是在构建视图控制器时,特别是当你使用 XIBs 或 Storyboards 定义它们时,因为这样你就无法再控制你初始化器了。...为了发挥作用,这个视图控制器需要一个系统提供PHPhotoLibrary实例(它是一个单例),以及一个我们自己PhotoEditorEngine实例。...Swift 代码"*中技术是如何通过使用协议为系统照片库提供一个更抽象PhotoLibrary接口。...虽然使用初始化器或基于属性依赖注入指定NoteManager应始终使用显式队列会很好,但这可能需要对进行大修改,而我们现在还不能/不愿意这样做。 这就是基于参数依赖性注入作用。

64910

iOS开发常用之网络

SwiftyFORM - swift表单输入框架(亮点是表单验证规则引擎),是见过地最易用Swift表单组件。...BubbleTransition - 以气泡膨胀和缩小动画效果显示和移除控制器,Uber就是这种取消操作方式。...InceptionTouch.swift - 没有3D Touch设备也有类似交互体验InceptionTouch(基于UITextView实现,支持日期,链接,电话号码,地址触摸响应)。...TWControls.swift - 简单开关和按钮控制器,使用闭包执行由控件触发操作。 Instructions.swift - 可定制嵌入式操作指引框架及演示。...STLBGVideo - STLBGVideo视图控制器自定义backgroundvideo,实现说明1,实现说明2。 Advance.swift - 简单易用,功能强大动画框架库。

23.6K10

肘子 Swift 周报 #020 | 准备迎接 Swift 6 到来

在 Xcode 8 推出之前,开发者可以通过访问未公开 API,使用第三方插件修改和增强 Xcode 内部功能,赋予了广泛自定义及扩展能力。...Twitter 一直被视为一个成熟应用程序,但这次收购和重命名意味着它从稳定发展状态跳跃到了一种“快速行动并接受打破常规”新阶段。...本文由 Pol Piella 撰写,详细介绍了自定义 Core Data 迁移实现方法,包括创建映射模型文件和自定义迁移策略。...文章以存储音乐轨道信息应用为例,展示了如何通过引入新实体和关系以及实施自定义迁移策略应对数据模型扩展问题。...想了解更多关于这一新特性信息,可以参考此篇文章[15]。 THANK YOU 如果你觉得这份周报或者文章对你有所帮助,欢迎 点赞、赞赏,并将其 转发 给更多朋友。

23210

iOS无埋点数据SDK实践之路

SDK 数据收集功能实现主要通过 Method Swizzling hook 相应方法。hook方法大致可以分为3:系统方法、系统Delegate方法、自定义方法。...自定义方法 顾名思义,自定义方法是指开发人员在工程中自已定义,而非系统方法。SDK一些功能是通过hook 这些方法实现。...其实hook系统 delegate 方法也可以看成是 hook 自定义方法,因为系统 delegate 方法大多都是需要在自定义中实现。...这种做法能够解决对viewPath影响,但是细心的人可能会意识到另一个隐藏问题:如果在不同组件库中,两个不同视图或控制器具有相同名字(在Swift中是允许,因为有Module进行区分),这种情况下...其实经过仔细考虑,这个担忧有点多余,因为就算两个Module中视图或控制器名字一样,但是他们里面的视图结构会有所不同,进而深度也不一样,viewPath也不会完全相同。

1.5K20

如何解决Xcode中SIGABRT错误

大家好,又见面了,是你们朋友全栈君。 一分钟,您iOS应用程序可以在Xcode中正常运行,而下一分钟,它由于不可思议SIGABRT错误而崩溃了。这是怎么回事!?...此时,它将还将XIB插座连接到视图控制器属性。 如果您更改了插座属性名称,则您应用程序将找不到它。因此,它将引发异常。导致SIGABRT错误原因是未处理该异常。...该应用程序此时告诉我们,视图控制器不符合该键键值编码button。这意味着它无法button在视图控制器上找到该属性。没错,因为我们已经对其进行了重命名。...iOS使用一种称为键值编码机制检查视图控制器具有的属性,因此它可以使用这些属性引用其基于XIB创建UI元素。 您现在如何解决该错误?...该违规代码是在第21行ViewController.swift,内部viewDidLoad()功能 你甚至可以看到,我们所使用标的“吸气”Array 在崩溃之前,进行了大量与视图控制器相关函数调用

5.9K20

一个框架&一个工具

APIService 如果是微信好友小伙伴,估计已经在朋友圈看到我分享过,在这里就简单介绍下吧,具体细节可以去repo看文档以及代码。...APIService 是一个轻量 Swift 网络抽象层框架,将请求、解析等流程工作分成几大角色去承担,完全面向协议实现,利于扩展。...(顺便说下,SwiftUI是真快,坑也是真多) 工具大概长这样: 主页面 图片 工具目前仅支持Swift语言几种框架。...一般都需要配合propertyWrapper使用,所以工具提供了为每一种类型自动加上自定义propertyWrapper设置; SwiftyJSON HandyJSON dmg 链接:iOSToolKit.dmg...最后 其实这两个产出之间是关联,都是为了网络请求这件事情变简单,其实中间还用过Sourcery解决Codable重命名字段名时候需要将所有不需要重命名字段放到CodingKeys问题,但是最近更新

42530
领券