- 博客(14)
- 收藏
- 关注
翻译 开放封闭原则(Open Closed Principle)
在面向对象的设计中有很多流行的思想,比如说 “所有的成员变量都应该设置为私有(Private)”,“要避免使用全局变量(Global Variables)”,“使用运行时类型识别(RTTI:Run Time Type Identification,例如 dynamic_cast)是危险的” 等等。那么,这些思想的源泉是什么?为什么它们要这样定义?这些思想总是正确的吗?本篇文章将介绍这些思想的基础:开放封闭原则(Open Closed Principle)。Ivar Jacobson 曾说过 “所有系统在其
2020-09-18 17:23:41 1292
原创 如何在Swift中使用Result
Result介绍Swift标准库的Result类型使我们能够使用单个统一类型来表达给定操作的结果(无论成功还是失败)。让我们看一下在哪种情况下Result可能有用的方法,以及一些在开始使用该类型时要牢记的技巧和窍门。尽管有很多不同的方法可以对Result类型进行建模,但是Swift标准库中内置的方法被声明为通用枚举,它针对结果可能包含的成功值以及遇到的任何错误进行了强类型化。看起来像这样:enum Result<Success, Failure> where Failure: Error
2020-09-08 15:08:29 1861
原创 为什么模型对象不应该实现Swift的Decodable或Encodable协议
到目前为止,您可能在想:“他在说什么?Decodable和Encodable协议非常有用!”我也同意你的看法。在Decodable和Encodable协议确实很有用。例如,Swift提供了一种本地方法来解析JSON元素或从 User Defaults 存储和检索对象,这是很棒的。没有什么问题。但是,我认为我们在模型对象中使用这些协议会犯错。我将尝试解释原因。领域(Domain)模型和数据(Data)模型领域模型 是一种面向对象的模型,该模型合并了行为和数据。它代表了我们试图建模的业务规则。数据模
2020-09-02 18:35:34 972
原创 使用Alamofire中的Adapter和Retrier进行身份验证
Alamofire是可用于iOS和Mac项目的流行框架。它使网络实施变得容易,并允许我们使用RequestAdapter进行身份验证来对请求签名。对身份验证请求签名API通常要求您使用结合Authorization请求头的JSON Web令牌来签名请求。每个外发请求都需要设置该身份验证请求头才能被后端接受。Alamofire中的RequestAdapterAlamofire带有两个协议,RequestAdapter和和RequestRetrier。RequestAdapter:可以在必要时以某
2020-08-12 16:25:45 715
翻译 Alamofire高级用法
本文由 简悦 SimpRead 转码, 原文地址 github.comSession创建自定义Session实例创建Session一个URLSessionConfigurationSessionDelegatestartRequestsImmediately一个Session的DispatchQueue小号添加一个 RequestInterceptor添加一个 ServerTrustManager添加一个 RedirectHandler添加一个 CachedResponse.
2020-08-11 16:22:25 4041
原创 iOS中的流程协调器(Flow Coordinators)
作为开发人员,我们一直在寻找,学习和尝试不同的软件开发方法。我一直在寻找方法来更好地管理APP的复杂性并编写更具表现力和可维护性的代码。最近,我发现了几篇文章讨论了一种企业设计模式,该模式已开始在iOS开发中应用。这种企业模式称为 ::应用程序控制器模式(Application Controller pattern)。::我首先在Soroush Khanlou的博客文章 8模式帮助您销毁大量视图控制器 中遇到了这个概念,他提到了一种称为Navigator的设计方法。该设计概念将视图控制器的表示封装到一个
2020-08-07 17:42:29 825
翻译 单一职责原则(Single Responsibility Principle)
单一职责原则(SRP:The Single Responsibility Principle)一个类应该有且只有一个变化的原因。There should never be more than one reason for a class to change.为什么将不同的职责分离到单独的类中是如此的重要呢?因为每一个职责都是一个变化的中心。当需求变化时,这个变化将通过更改职责相关的类来体现。如果一个类拥有多于一个的职责,则这些职责就耦合到在了一起,那么就会有多于一个原因来导致这个类的变化。对
2020-07-31 12:22:46 760 1
原创 iOS中的模块化架构(Modular Architecture)
模块化体系结构是软件工程中非常流行的主题。随着整体应用程序的增长,它变得越来越难维护,因此需要将其拆分为单独的模块。在后端是 微服务 ,在Web上是 微前端 。在本文中,我们展示了它如何在 iOS中工作 。在 上一篇文章中 ,我们了解了如何使用 Clean Architecture + MVVM 创建应用程序。在这里,我们展示了如何通过将应用程序 分离 到 隔离的 模块 (例如 NetworkingService,TrackingService,ChatFeature,PaymentsFeature …
2020-07-29 17:04:05 1142
翻译 依赖倒置原则(Dependency Inversion Principle)
很多软件工程师都多少在处理 “Bad Design” 时有一些痛苦的经历。如果发现这些 “Bad Design” 的始作俑者就是我们自己时,那感觉就更糟糕了。那么,到底是什么让我做出一个能称为 “Bad Design” 的设计呢?绝大多数软件工程师不会在设计之初就打算设计一个 “Bad Design”。许多软件也在不断地演化中逐渐地降级到了一个点,而从这个点开始,有人开始说这个设计已经腐烂到一定程度了。为什么会发生这些事情呢?是因为最初设计的匮乏吗,还是设计逐步降级到像块腐烂的肉一样?实际上,寻找这些答案
2020-07-23 16:14:31 432
原创 iOS上的干净架构(Clean Architecture)和MVVM
iOS上的Clean Architecture和MVVM当我们开发软件时,不仅要使用设计模式,还要使用体系结构模式,这一点很重要。软件工程中有许多不同的架构模式。在移动软件工程中,使用最广泛的是MVVM,Clean Architecture和Redux模式。我们将在 工作示例项目中 看到如何在iOS中应用两种架构模式MVVM和Clean Architecture。如果您有兴趣学习Redux,请阅读这本很棒的书: Advanced iOS App Architecture 。更多信息关于 Clean A
2020-07-22 17:46:45 2888 2
原创 使用模块化扩展iOS应用
介绍在本博客文章中,我们希望分享过去几年在扩展Depop iOS应用程序开发方面所面临的挑战,无论是在并行开发的功能数量方面,还是在促成Depop iOS应用程序数量方面代码库。我们将解释在这种情况下将大型和旧代码库 模块化 为小型,独立且可测试的组件的关键。在此过程中,我们还将分享我们采用的一些解决方案,以解决 依赖关系管理 并在持续交付设置中优化 构建性能 。总览这是我们应用程序代码库在其初始形状时的样子。Pods是CocoaPods项目,其中包含整个应用程序依赖项。在我们开始的时候,这很
2020-07-17 11:59:58 289
原创 深入研究绘图——图像和图像视图
基本的通用UIKit图像类是UIImage.。UIImage.可以读取存储的文件,因此,如果不需要动态创建图像,但在应用程序运行之前已经创建了图像,则绘图可能与提供图像文件作为app bundle中的资源一样简单。系统知道如何处理许多标准图像文件类型,如HEIC、TIFF、JPEG、GIF和PNG;当图像文件包含在app bundle中时,iOS对PNG文件具有特殊的亲和力,您应该尽可能地选择它们...
2019-03-21 09:23:13 631
原创 iOS12的H5页面不下滑两种处理
H5中JS代码调整原理就是弹起键盘的时候,window.scrollY会从0变到键盘的高度,当输入框焦点失去后让scrollY回到0就好了。APP原生代码调整
2019-03-06 15:55:08 1761
翻译 深入探究Views
视图(其类是UIView或UIView的子类的对象)知道如何将自己绘制到界面的矩形区域中。 多亏了视图,你的应用程序才有一个可见的界面; 用户看到的一切最终都是因为视图。 视图的创建和配置非常简单:“设置完后就无需再关注。” 例如,你可以在nib编辑器中配置UIButton; 当应用程序运行时,按钮出现,并正常工作。 但您也可以实时地以强大的方式操纵视图。 您的代码可以完成视图自身的部分或全部绘图...
2019-02-26 11:49:33 1298
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人