依赖注入

依赖注入是一个概念,用于删除耦合,明确定义和区分类和对象的职责,增加透明度并促进单元测试。 听起来很花哨,而且会被行话淹没。 但这确实是简单的设计原则。 依赖注入意味着给对象一个实例变量 依赖注入仅是将依赖注入到对象中,而不是负责创建对象的依赖关系。 让我给您一个示例,使其更清楚,看到该示例后,您意识到我有时使用依赖项注入,但我对此一无所知。 但请放心,这会使我们两个人成为现实。 我将在Swift中举例说明,但是概念可以在任何地方应用。 我们可以通过两种方式设置属性requestManager: 没有依赖注入: 第一种方法是让ViewController实例化RequestManager实例,即,视图控制器负责创建RequestManager实例。 这意味着视图控制器不仅知道RequestManager类的行为。 它还知道它的实例化。 使用依赖注入: 在此选项中,我们将依赖项(RequestManager)实例注入到ViewContoller实例中。 通过注入请求管理器,视图控制器不知道如何实例化请求管理器。 让我们看看其他示例: DataManger类具有一个属性,类型为Serializer?的序列化器。 序列化器是一个协议。 DataManager类负责实例化符合Serializer协议的类型的实例RequestSerializer类。 DataManager类是否应该知道如何实例化Serializer类型的对象? 现在,DataManager类不再负责实例化RequestSerializer类。 它不再分配其序列化器属性的值。 只要符合Serializer协议,我们就可以用另一个轮胎替换RequestSerializer。 DataManager不再了解或关心这些详细信息。 依赖注入的优点: 透明度: 通过注入对象的依赖关系,类或结构的职责和要求变得更加清晰和透明。 通过将请求管理器注入到视图控制器中,我们了解到视图控制器取决于请求管理器,并且视图控制器负责请求的处理和管理。 测试: 依赖注入使单元测试更加容易。 使用模拟对象替换对象的依赖关系非常容易。我们可以创建另一个符合Serializer协议的MockSerializer,并在实例化DataManger类时将其分配给serializer属性。 责任与耦合分离: 数据管理器类无需实例化RequestSerializer实例。 它不需要知道如何执行此操作。 还可以使用协议和依赖项注入来减少项目中的耦合。

Objective-C中的运行时

Objective-C是一种动态语言。 使用Runtime ,可以通过C中的struct来表示对象,并且可以通过c语言function来完成方法。 Runtime是用汇编和c编写的。 利用Runtime的好处,我们还有另一种方法来调用类和实例方法。 下面的示例演示如何使用Runtime来调用类和实例方法:

欢迎DigiByte进入App Store!

DigiByte团队很高兴宣布iOS版DigiByte发行,现已被Apple接受,即将面向iPhone和iPad所有者发行。 现在,您可以从iOS版DigiByte应用程序中保存,存储,消费和发送DigiByte,以及支持Digi-ID。 我相信你们所有人都会感谢我,感谢那些使这一切成为可能的开发人员,特别是Yoshi,Ploenne,Fredrick,Gary,Jared和Damir! 这要归功于他们的辛勤工作。 在确保满足苹果所有要求的同时,存在许多延迟,这已经不是什么秘密了,但是在这段时间内,它使我们能够彻底检查UI,以及Digi-ID的实现以及对Java的完全/本地支持推出超过50种语言! 我还要感谢我们所有的TestFlight“测试人员”,他们在我们改进应用程序时提供了宝贵的反馈意见。 您对应用程序的投入非常宝贵。 您仍然会注意到,如果您已加入TestFlight,则“ DigiWallet”应用程序仍然存在。 这是由于我们必须分别将DigiByte应用程序重新提交给Apple,因此我们将同时运行这两个应用程序,以期在3-6个月内停用DigiWallet TestFlight应用程序。 我们强烈建议用户确认其备份密码,然后尽快迁移到“ DigiByte”应用程序! 该应用程序代表了我们的“初始”版本,团队期待进一步的改进,修复和功能,因为我们将其打造为App Store上最好的区块链应用程序之一。 因此,热烈欢迎我们所有的iOS用户! 请密切注意App Store下载链接,当苹果将其分发到所有下载服务器后,您会在接下来的48-72小时内看到它。

Usei Clean Architecture num projeto de duas telas e me arrependi …

ATENÇÃO-Nãoirei abordar或XYZ防守者,nãoéo intuito desta publica por球场,mas sim falar sobre umaexperiênciaque tive dan。 重要信息后,vamos ao que interessa。 Muita classe e pouca entrega? 喜剧明星将在美国清洁运动中发挥重要作用,罗南·道格拉斯·门德斯(Ronan e Douglas Mendes),设计风格的设计者 清洁的原则上的原则性影响者 清洁工,软件工程师,软件工程师,软件工程师,软件工程师,软件结构和设计指南,以及优秀的专家arquitetura etambém设计图案napráticae logo de caravocêvêessa imagem, levanta-se evêque possuiinúmerascamadas quevocênãoestáacostumado,nãoé? Esse semper foi um ponto que discuti muito com Ronan e Douglas,Pois me dava aimpressãoque que que que fazer […]

React Native:开发iOS 2

Nativeอจากตอนที่แล้วReact Native:iOS开发人员ตอนที่1ขอเริ่มเกริ่ริ่นพื้นฐานอีกนิดหน่อยถ้าอ่านแล้วยังไม่เข้าใจก็อย่าเพิ่งตกใจ พื้นฐาน งอมูลสองประเภทที่ใช้ในการควบคุมการทำงานของ组件-道具状态 道具ถูกกำหนและคงที่ไปตลาโดย父และคงที่ไปตลอด终身ของ组件เลยในขณะที่状态คือข้อมูลที่เปลี่ยนแปลงได้ คื คืcreation创建参数ซึ่งสมมมีมมๆกำลังจะถูกสที่ั้ั้creation creation creation 这个道具。 myCreationParameter React Native组件พื้นฐานที่ชื่อว่าImageซึ่งมีตัวแปรpropsชื่อ’source’ สำหรับกำหนดรูปที่จะแสดง render(){ 让pic = { uri:“ https://url_to_image/test_image.jpg” }; 返回( <Image source = {pic} style = {{width:193,height:110}}} /> ); } 注意—括号{}ในการ嵌入ตัวแปรเข้าไปในJSXและภายใต้{}เราสามารถใส่JavaScript表达式เข้าไปได้ นอกจากนี้เรายังสามารถใช้道具ในcomponentที่สร้างขึ้นมาเองได้ตัวอย่างเช่น 问候类扩展了组件{ render(){ 返回( 您好{ this.props.name }! ); } } สนได้ว่าคลาส问候มีการเรียกใช้道具ที่ชื่อ ‘ name ‘ ส่วนโค้ดด้านล่างเป็นงเป็ากรเรียกใช้คลาส问候สร้อมกำหนดค่าของตัวแปร道具’name’ class OtherClass扩展Component { render(){ 返回( ); } […]

“与我们同行”应用程序可查找您的午餐伴侣

娜塔莉·汉普顿(Natalie Hampton)“与我们同行”的创作者 纳塔莉·汉普顿(Natalie Hampton)是来自加利福尼亚谢尔曼·奥克斯(Sherman Oaks)的16岁女孩,她是《与我们同行》(Sit With Us)的设计师,该产品于2016年9月9日推出。 这种情况使汉普顿感到脆弱,并使她成为欺凌的目标。 汉普顿现在是一名大三学生,正在上另一所学校,并且在社会上蒸蒸日上。 然而,独自一人被欺负的记忆仍然困扰着她,尤其是因为她知道自己的经历并不是孤立的。 娜塔莉·汉普顿(Natalie Hampton)在她的七年级和八年级的大部分时间里都独自吃午餐。 她说,她是洛杉矶一所女子私立学校的新女孩,成为一群“中庸女孩”的目标,这些人将她排除在派对之外,称呼她的名字,甚至殴打她。 他们告诉她她很丑,永远不会有任何朋友。 他们将她推入更衣室,抓挠她,甚至威胁要杀死她。 她害怕告诉他们,害怕他们报复。 曾经是一个喜欢上学的孩子,她停止进食,无法入睡。 焦虑变得如此严重,以至于她不得不住院。 她妈妈称之为“我们一生中最黑暗的时期”。 然后是转折,娜塔莉提出了一个想法,该想法使学生能够以一种无判断力的方式找到午餐伴侣,而不必担心被拒绝。 她开发了一个名为“ Sit With Us”的应用程序,学生可以在该应用程序中注册为“大使”,并在午餐桌上张贴开放的座位。 没有座位的学生可以看一下应用程序,找到大使桌,知道他们被邀请加入。 当签约成为大使时,学生保证他们会友善并欢迎任何与他们坐在一起的人。 她说:“午餐看似很小,但我认为这些都是使学校更具包容性的小步骤。” “似乎您并没有问那么多,但是一旦您使人们有了心态,它就会开始改变学生相互思考的方式。 他们之间的相处方式产生了巨大的变化。” 汉普顿在NPR的“所有考虑事项”中告诉奥迪·康沃尔(Audie Cornish),她之所以认为这样的应用程序是必要的,是因为它可以防止孩子被公众拒绝并被同龄人视为社会弃儿。 普林斯顿大学,罗格斯大学和耶鲁大学进行的一项研究显示,当学生-尤其是“酷孩子”-经受住欺凌时,这会产生重大影响。 在2012-2013学年期间,新泽西州超过50所中学为社交能力最强的学生提供了社交媒体工具和鼓励,以打击欺凌行为,并且学生冲突报告减少了30%…。 所以不要欺负一个孩子(尤其是女孩🙂,您不会在这里欺负他人,扩大您的友谊圈……很抱歉,这个应用程序是面向Apple的😛(ios)

迅速小吃105:Ch-ch-ch-ch-changes

小吃boi和小吃gal的搭扣,这里是105。 Shizzle变得真实。 所有流行的社交应用程序都要求用户完成注册过程。 需要注册,以便为每个用户分配唯一的标识符。 该标识符用于识别存储在云中的与用户相关联的数据(例如消息)。 让我们假设。 我街上最酷的孩子,刚把我带到Snackergram,这是拍摄小吃的最热门新方式。 打开时,Snackergram会显示一个“启动屏幕”,该屏幕充当封面,应用程序在其后开始运转。 几秒钟后,我看到一个注册/登录屏幕,因为该应用知道我是新用户。 注册完成。 显示主用户界面。 Snackergram上的小吃很摩尔人,以至于我不得不注销以避免诱惑。 注销后,重新出现注册/登录屏幕。 以前,我通过在应用程序的主导航堆栈上模态显示注册/登录视图控制器来实现上述工作流程。 这种方法并不理想,因为它将主导航堆栈的视图控制器保留在内存中,并且就用户体验而言,这种方法不够灵活。 这些天,我遵循Stan Ostrovskiy在以下链接中描述的体系结构:– https://medium.com/@stasost/ios-root-controller-navigation-3625eedbbff Stan的方法是为每个应用程序的关键过程分别构建UINavigation堆栈:注册/登录工作流程和主要应用程序功能。 建立“四分卫”(根视图控制器)以根据给定时间的用户状态显示适当的孤立堆栈。 是时候建立一个说明性的例子了。 启动一个单一视图项目,然后删除该故事板业务(请参见Swifty Snacks 101)。 将“样板” ViewController.swift文件重命名为RootController.swift,然后在AppDelegate的didFinishLaunchingWithOptions中将应用程序窗口的rootViewController设置为RootController。 在RootController中,将视图的backgroundColor设置为红色。 生成并运行以检查一切是否正常。 RootController将充当我们的四分卫,让我们给它一些团队一起玩。 当应用“启动”时,Team SplashController会向用户显示启动屏幕。 在其视图中添加活动指示器,并指示其循环3秒钟,以模仿对云的调用。 接下来,构造团队RegistrationLoginController。 除了关联的功能“登录”之外,还添加一个左侧的栏按钮作为navigationItem。 最后,建立应用程序的MainController团队,添加与功能“注销”关联的“注销”按钮。 为了使我们的“四分卫”领导,我们必须授权其队友在需要时参考他的领导。 我们将把这种参考方式定义为AppDelegate的扩展。 现在,我们可以从应用程序中的任何位置调出“四分卫”(又名rootViewController)。 太好了,现在返回RootController为其提供工具来管理其新发现的职责。 目的是将我们的“四分卫”设置为父视图,并按照指示添加适当的孩子。 使用私有变量设置对当前子视图控制器的引用。 通过向类添加初始化程序来解决xCodes问题。 接下来,允许xCode添加所需的init(coder),按入警告并选择“修复”。 现在,在viewDidLoad()中,我们可以将当前视图控制器设置为RootController的子级,该控制器将作为SplashController类的实例开始。 将孩子的view.frame设置为与父对象的view.bounds相等。 我们这样做是为了在UI发生更改(例如,调用通话状态栏)时,孩子的框架与其父视图保持一致。 将子级添加为子视图,然后通过调用didMove(toParent:self)完成此过程,必须在“将视图控制器添加到容器视图控制器中或从容器视图控制器中删除视图控制器之后调用”。 现在,我们可以在RootController中构建三个新函数,供四分卫使用,以更改显示的当前ViewController:showRegistrationLoginScreen()和showMainScreen()。 考虑showRegistrationLoginScreen()。 在第1部分中,我们添加了RegistrationLoginController()实例作为四分卫的孩子。 请注意,RegistrationLoginController()被嵌入为新UINavigationController的根-请勿将此根与我们应用的rootViewController(又名四分卫)混淆。 第2部分将安装四分卫的孩子作为其当前视图控制器,即它将显示给用户的四分卫的孩子-旧的,新的。 根据showRegistrationLoginScreen()的结构,继续构建showMainScreen()。 到目前为止,一切都很好。 最后,让我们“遍历”用户旅程,添加代码以通知四分卫根据当前会话状态应显示哪些视图控制器。 […]

让您的应用讲述您的故事

2017年9月1日 我们刚刚将iOS应用的新更新发送到App Store。 这是一个大版本,其中包含Content Extensions,iOS 11兼容性和许多技术改进。 内容扩展:讲述您的品牌故事 如您所知,品牌营销完全是讲故事。 当然,品牌商希望将这些故事告诉最好的客户:下载您应用程序的客户。 我们新的Content Extensions可以轻松地将品牌内容添加到与您的产品和类别无缝集成的应用程序中。 客户在您创建并添加到应用程序的网页上阅读您的故事。 并且,当您在这些页面上列出产品或类别时,这些产品或类别将在该内容的顶部无缝打开。 去年,我们已经在阿姆斯特丹的Scotch&Soda的Misguiding Guide进行了试点。 可能的新内容扩展的一些示例: Marlies Dekkers:在网页上发布了她的新“ Signature Collection”,其中包含个人YouTube视频和产品背后的设计思想。 介绍了实际产品。 现在,Marlies Dekkers团队可以将该内容添加到应用程序中,当客户阅读并点击产品时,本机产品详细信息视图即被加载到故事的顶部。 碎片:为Muuto品牌创建品牌页面。 该页面讲述了品牌背后的设计愿景,并列出了其顶级产品和产品类别。 同样,此页面现在可以轻松添加到应用程序中,而点击Muuto类别的客户将直接进入本机类别视图。 可能性是无止境。 最好的部分是,您可以很容易地将现有内容适应应用程序,并且可以独立于Highstreet常规版本进行操作。 今天,我们正在为所有客户提供此功能。 iOS 11兼容性 在不到两周的时间里,iOS 11将对所有Apple用户可用。 在我们以前的博客文章中,我们已经向您展示了期望的内容(例如,重新设计的App Store,AR购物等等)。 在此版本中,我们确保这些应用程序与iOS 11完全兼容。 技术改进: 解决了隐藏帐户编辑中“状态”字段时显示额外分隔符的问题。 从细节视图到另一个细节视图上的关联产品列表的改进动画。 修复了Peek Pop内存泄漏。 修复了在加载新内容之前在Web视图中可见旧内容(HTML)的问题。 某些品牌外观书中改进的产品单元:该单元现在使用了不同大小的上下文,从而导致更小的注释(仅适用于iPhone)。 修复了“重置密码”按钮。 修复了iOS键盘覆盖iOS 11上的输入字段的问题。 更多即将推出 我们每几周发布一次平台的新更新。 随时关注我们的博客以保持最新状态。

iOS框架和库的文档

如何在Jazzy中为Swift项目生成文档 Jazzy是一个很棒的开源工具,可以为您用Swift编写的代码生成Apple风格的文档。 Jazzy创建了一堆HTML页面,这些页面可以包含代码的每个部分以及其中编写的文档。 它是命令行实用程序/工具,易于使用。 Jazzy工具自动为用Swift编写的框架,pod或库创建与Apple官方参考文档匹配的文档,而无需在Xcode之外编写任何代码。 结果将是一堆HTML文件,这些文件看起来几乎与Apple为其框架提供的文档一样。 这是一个如何在Swift中注释方法的基本示例: / ** –参数视图: –参数标题: –参数消息: –参数样式: * / 进口基金会 导入UIKit ///生成警报和操作表 公共类警报{ // MARK:公共方法 / ** 显示当前视图控制器的警报。 –参数视图:在其上显示警报的视图。 应该使用self,或者如果从viewDidLoad()方法调用,则使用根视图控制器。 –参数标题:警报标题 –参数消息:警报中显示的主要消息 –参数样式:警报措施的类型。 请参阅Apple文档中的UIAlertActionStyle枚举。 * / public func showAlert(view:UIViewController,title:String,message:String,style:UIAlertActionStyle){ 让警报= UIAlertController(标题:标题,消息:消息,preferredStyle:UIAlertControllerStyle.Alert) setAction(警告,样式:样式) view.presentViewController(警告,动画:true,完成:无) } / ** 在当前视图控制器上显示操作表。 –参数视图:在其上显示操作表的视图。 应该使用self,或者如果从viewDidLoad()方法调用,则使用根视图控制器。 –参数标题:操作表标题 –参数消息:操作表中显示的主要消息 –参数样式:动作表动作的类型。 请参阅Apple文档中的UIAlertActionStyle枚举。 * / public func showActionSheet(view:UIViewController,title:String,message:String,style:UIAlertActionStyle){ 让警报= […]

清除macOS上的硬盘空间

所有计算机都必须管理硬盘空间。 最好的方法是通过文件夹和文件夹结构来组织内容,并在我们积累大量内容之前尽早清除不需要的内容。 但是,如果为时已晚,请继续阅读。 在macOS上,有一个实用程序可以确定在何处以及使用了多少空间。 该实用程序的一个缺点是它没有披露与系统相关的空间消耗,因为Apple工程师可能认为人们访问和删除这些区域中的内容是不安全的。 但是,对操作系统有所了解的专业人员也可以在这些区域执行一些清理任务。 这是通过使该实用程序可以访问“系统”区域下的内容。 要了解磁盘利用率,macOS有一个实用程序,可将空间消耗分类为系统,应用程序,文档等类别,这有助于确定造成空间消耗的主要来源。 单击菜单栏上的>>> 关于本机 ,然后单击存储选项卡 至 访问此。 下面的屏幕截图显示了以对比色显示的分类。 当我们单击上面的屏幕快照中的“ Manage…”按钮时,我们得到以下屏幕,该屏幕使我们可以选择部分并优化存储。 在这里,选择侧栏上的任何部分,例如“文档”或“应用程序”,将显示文件,应用程序或文件夹及其已消耗的磁盘空间量。 然后,我们可以使用此信息来决定是删除还是保留该文件。 要浏览所有文件和文件夹,请单击侧栏上的“文档”,然后单击“文件浏览器”选项卡,如下所示: 针对巨大文件夹显示的大小可能不会立即显示,因此请等待几秒钟或几分钟,直到操作系统确定大小为止。 macOS的主要卷是Macintosh HD。 如果我们通过相同的实用程序进行访问,则可以知道其下每个文件或文件夹占用的磁盘空间。 因此,我们通过在终端上执行以下命令,在我们的桌面文件夹上创建指向它的符号链接: ln -s /卷/ Macintosh \ HD〜/桌面/ 请记住,从终端的主文件夹或符号链接源(本例中为Macintosh HD)的符号链接源以外的任何其他文件夹执行上述命令。 如果您不在终端上的主文件夹中,则可以通过执行以下操作转到主文件夹: cd〜或只是cd 现在,使用与上述相同的实用程序,并从“桌面”文件夹中浏览Macintosh HD,以查找包含有害数据的区域。 您还可以通过以下实用程序查看隐藏的文件夹和文件,以保持以下状态检查其大小: Command + Shift +。 此快捷方式也可以在Finder上使用。 要隐藏要再次隐藏的文件夹,请再次按住相同的键。 知道文件和文件夹占用的空间后,我们可以决定要删除的空间。 最后一步,清除“废纸””以重新获得磁盘空间。 主文件夹下隐藏的“库”文件夹是一个值得寻找的地方,特别是对于应用程序开发人员而言。 系统下方显示的用法的主要部分包括zip文件,一些安装程序文件等,它们已存储在硬盘中的任何位置。 这可以在“文档”,“桌面”或任何其他目录下。 最后,如果清理活动完成,我们可以安全地从桌面删除符号链接,因为它们只是原始文件夹的快捷方式。 这样,可以清除Mac中大量不需要的数据。 唯一要考虑的是在将文件或文件夹发送到永恒之前,请先了解它们的用途。