作为兼职/业余编码员,我可能曾经是Apple的目标程序员:敏锐,充满活力,但如果我要真正实现目标,则迫切需要帮助。 Apple提倡Model-View-Controller应用程序设计的变体已经不是什么秘密了,但值得庆幸的是,他们没有像这样推销它。 它们只是为您提供了所需的所有工具,模板以及自动完成功能,可让您在单个文件(具体来说就是UIViewController)中构建第一个应用程序。 不用离开该文件就可以做一些很棒的事情,但是如果您冒险进入另一个很好的场景,只需将另一个UIViewController放在StoryBoard上,创建一个序列就可以了。 现在,您有一个功能丰富的应用程序,可以做的事,只需要担心两个文件。 简单性令人迷惑,这意味着任何人都可以制作应用程序并在App Store上出售。 但是后来我开始制作具有4个视图,然后是5个,6个的应用程序。然后我想使它在iPad上看起来与众不同。 方向呢? 哦,当然,我希望一切都可以连接并流通。 我开始严重失去控制权,并想知道MVC的含义是什么,因为我似乎只有ViewControllers才多,但幸运的是,播客来帮助我,并向我展示了另一条路线。 Garric Nahapetian的Swiftcoders:第38集与KrzysztofZabłocki
您是否想知道如何在Swift中处理Bitmasks? 您是否听说过 OptionSet 并且想了解更多? 好吧,这是给你的! 什么是OptionSet? 基本上,OptionSet是一种符合它的协议,使您能够进行位屏蔽。 它是位集的表示,每个位都代表一个选项。 听起来不清楚? 让我们编写代码: 如何实现OptionSet? 这是一个符合OptionSet的Structure的基本实现: struct MyStruct:OptionSet { let rawValue:Int静态let firstOption = MyStruct(rawValue:1 << 0) 静态让secondOption = MyStruct(rawValue:1 << 1) 静态让thirdOption = MyStruct(rawValue:1 << 2) } 让我们解释一下上面的代码中发生了什么: 符合OptionSet要求声明rawValue ,它不必是Int类型,而是任何类型的FixedWidthInteger例如Int8或Int16 。 接下来,您需要静态地声明所需的选项,然后猜猜是什么? 这就是创建选项集所要做的全部! 好吧,我想假设您仍然对自己声明选项有些困惑,您可能会想到“为什么它必须是静态的? 什么是<<东西?” 补充工具栏注意 :如果您不那么了解,那么在直接进入OptionSet选项声明之前,我建议您熟悉“一对一”的世界。 了解十进制值的二进制表示形式将使理解和实现OptionSet选项更加容易。 这是一篇很酷的文章:位,字节,用二进制构建。 从逻辑上讲,应该将选项声明为static ,因为您可以直接访问它,而无需从一致的结构(在我们的示例中为MyStruct )实例化-稍后我们将看到。 接下来,应将选项声明为一致结构的实例(在我们的示例中为MyStruct),并为其分配所需的“二进制计数” rawValue,这就是使用<< 左移运算符的目的。 尽管我建议您查看按位运算符的文档-按位左移和向右移位运算符,但我还是要简要介绍一下它的工作原理:它将所有数字向左移动,例如: 让一个= 0b0001 // […]
在处理数据或自定义数据类型时,每个人有时都会遇到这个问题。 因此,我深入研究了Google和许多网站,并指出了一些我想分享给大家参考的差异。 在此之前,我先说一下两者的相似之处: 结构和类都可以: 扩展 实施协议 定义初始化 具有属性和功能 您可以在这里简要阅读所有这些内容 区别 继承 : 类可以相互继承,但结构不能 2. 通过 : 类通过Reference传递,但结构通过Value传递。 因此,我们将类称为“引用类型”,将结构称为“值类型” 3. 可变性 : 如果结构是不可变的,则这些类是Mutable的。 例如,如果我们有用let属性声明的class实例,如let a:A()。 作为类内部变量的属性可以更改这些变量的值。 4. 参考计数 : 由于是引用类型,所以Class的单个实例可以一次具有多个引用,从而使其具有引用计数。 但是结构不是这种情况。 结构实例一次仅具有一个引用。 5. 初始化器 结构不需要声明任何初始化程序,因为默认情况下它们是可用的,尽管可以根据需要编写该初始化程序。 这些类需要声明init以将值初始化为属性。 6. 反初始化器 类确实具有deinit,而在结构中不存在。 7. 线程安全: 默认情况下,结构是线程安全的,因为它们是值类型,所以不会有覆盖相同实例的机会,因此不会有任何竞争条件。 这些类不是唯一的线程安全类,因为它们是引用类型。 何时使用结构和类: 我在这里找到Irina Ernst的最佳答案 “结构最适合保存数据,而不是逻辑。”
享有优先发展权的优等生 如盛大的演出者论坛“Seráque issoéImportante?”“ Issoédifícil?”“Seráque esse asse assunto vai me tomar muito tempo?” 。 Estas perguntas podem ser umcompustívelpara aprocrastinação。 解决问题的方法,以及解决问题的方法。 3种构成的血清素。 Todas做为先行先驱,先做后备,再做重要。 O否éque este guia seja umareferênciatanto pra iniciantesQuanto para quemjáatua profissionalmente naárea。 科莫 虚拟的看板Dada是流行的看板,也可以是虚拟的看板。 肯恩·埃姆·埃斯马(Kanbanéum esquema)/ quadro para Organizar suas tarefas,paraentãoexecuta-las。 它的功能已发布。 Para utilizar esse board,vocêpoderáseguir algumas regras: Nunca pule uma tarefa,semper pegue a […]
因此,Liskov替换原理指出,所有派生类都应可以替换为其原始基类。 实际上,这意味着子类对于它的超类应该始终是可互换的。 该原理的主要目的是保证类型层次结构内的语义互操作性。 假设我们需要描述具有飞行能力的车辆的速度 。 车辆是基础类,我们应该能够知道它的任何子类是否可以飞行。 因此,我们可以将飞机作为衍生自Vehicle的子类 。 为了清楚地说明我们的示例,我们还把Car作为派生自Vehicle的子类。 在应用程序中,您可以拥有不同种类的车辆,其中一些可以飞行,有些则不能。 但是我们今天的要求是获取速度描述。 因此,我们可以采用一种接收“ 车辆”类型的方法。 Liskov替代保证我们的speedDescription算法将保持运行,而不管它接收作为参数的S ubclass类型。 这个术语称为语义互操作性。 本系列文章涵盖了使用Swift语言的SOLID原理的实际示例,以前的路径是OPEN / CLOSE原理 。 对于完整的操场,您可以在github仓库中找到它。 希望我至少能够招待您,如果您有任何疑问,请不要犹豫。 推特: 鲍勃·戈德温(@bobgodwinx)| 推特 Bob Godwin(@bobgodwinx)的最新推文。 移动团队首席工程师@dunnhumby Germany GmbH。 @Apple的粉丝… twitter.com
在进入增强现实的奇妙世界之前,让我们确保已具备所有先决条件。 Xcode 9(测试版或更高版本) :ARKit在Xcode 9(测试版)或更高版本上可用。 因此,请确保下载最新版本的Xcode 9。 物理设备 :您将需要一个物理设备来测试您的ARKit应用程序。 建议测试设备至少包含A9处理器,这意味着iPhone 6S或更高版本或最新的iPad。 iOS 11(测试版或更高版本) :由于ARKit是iOS 11 SDK的一部分,因此要求您的设备运行iOS 11 beta或更高版本。 根据您的Internet连接,下载和安装所有内容可能需要10分钟到45天的时间。 我在开玩笑,最多30天🙂 现在,您已经下载并安装了所有必备软件,并准备好尝试使用iOS版ARKit构建增强现实应用程序。 在本章的最后,您将了解实现ARKit应用程序的基本概念。 启动Xcode 9并创建一个新项目。 您会注意到Xcode 9带有一个专门为ARKit应用程序设计的新项目模板, 如图1所示。 图1:Xcode 9中的增强现实项目模板 选择“ 增强现实应用程序 ”模板后,按“ 下一步 ”按钮。 这将带您到项目选项屏幕,该屏幕允许您配置项目的不同属性。 对我们而言,最重要的选择是“ Content Technology ”,它允许开发人员使用SpriteKit,SceneKit或Metal框架创建ARKit应用程序。 图2:对多种内容技术的支持 确保选择SceneKit,因为本书中的大多数示例都使用SceneKit作为内容技术。 接下来,为您的项目指定一个位置,最后按“创建”按钮使ARKit项目生效。 您只有片刻的时间见证了增强现实的魔力。 运行该应用程序,并确保您的物理iPhone已插入并已连接。 图3显示了运行中的ARKit默认应用程序。 您的花园可能没有我的花园绿🙂 图3:运行中的ARKit默认应用 休斯顿! 我们有ARKit! 本章是我的《 iOS开发者的ARKit》一书的一部分。 立即获取该书,并开始构建出色的增强现实应用程序。 祝贺您运行了第一个ARKit应用程序。 在下一节中,我们将了解制作默认ARKit项目所涉及的代码。 了解项目: […]
我偶然发现了一个编码实践问题,该问题要求我编写一个接受字符串的函数,如果不是字符串,它将返回缺少的字母。 我不知道是什么东西。 我不想让那吓到我。 我去了Google! 七巧板是使用字母表中所有26个字母的句子。 示例如下: “快速的棕色狐狸跳过了懒狗”包含了字母表中的所有26个字母。 不相信我吗? -数一下! 再次,编码问题是要求一个函数,该函数需要一个字符串,如果不是pangram,则返回缺少的字母,如果不是pangram。 它将返回一个空字符串。 这是更短的实现 在字母表中创建一组所有字母,并在给定的str中创建一组字母。 使用.subtracting方法从AlphabetSet中减去inputStrSet。 将结果存储在var missingLetters中。 返回缺少的字母。 我最初不对字母进行硬编码的方法是使用for循环遍历初始化为字符的Unicode Scalars范围“ a”…“ z”,然后使用String.init(char)将其转换为字符串。 将字母放入String到Bool的字典中,字母:false 然后,每次通过字母字典匹配一个字母时,都使用for循环遍历给定的字符串,将该字母的值设置为true。 遍历字母字典,如果value为false,则追加到missingLetters。 最后返回丢失的字母! 感谢您的阅读,今天仅此而已! 在下面的👏掌声中显示您的支持,并在我的iOS开发者之旅中关注我😊 丽莎·姜(@imnotlostrui)| 推特 来自Lisa Jiang(@imnotlostrui)的最新推文。 嗨,我是丽莎! 我希望有一天可以通过移动设备改变世界…… twitter.com NYCgirlLearnsToCode(LJ) NYCgirlLearnsToCode有55个可用的存储库。 在GitHub上遵循他们的代码。 github.com
我惊讶地发现在UITableViewCell中实现UICollectionView有多少绊脚石。 因此,我将把我使用的大量资源汇编成一个连贯的起点。 注意:这不是针对初学者的教程。 它假定您了解tableViews以及使用xib文件制作自定义单元格。 它也不会涉及使收藏夹视图看起来不错的任何事情。 在收藏夹视图中拖动 添加约束 找出您不能将CollectionViewCells添加到新添加的集合视图中。 原来,您需要一个单独的文件来容纳要显示的任何“收藏夹视图”单元格。 (当您的UICollectionView在Xib文件中时) 您可以在CollectionViewCell Xib中做任何您想做的事情,就本教程而言,我将更改背景色。 确保为您的单元格提供一个resuableIdentifier。 步骤1:返回您的tableViewCells Xib文件。 步骤2:显示文件大纲 步骤3:控制从您的collectionView拖动到“文件的所有者”,然后选择dataSource,然后再次进行选择代理。 步骤4:控制从collectionView拖动到TableViewCell类,然后创建IBOutlet 步骤5:将tableViewCell类与UICollectionViewDelegate和UICollectionViewDataSource一致 将UICollectionViewDelegate和UICollectionViewDataSource添加到类描述 在awakeFromXib中创建collectionView的数据源并委托= self 添加numberOfItemsInSection函数 添加cellForItemAt函数 创建一个带有您的reuseIdentifier的单元,并向下转换为您的自定义单元。 命中运行。 它将立即崩溃。 我们需要“为该标识符注册一个笔尖或类,或者在情节提要中连接原型单元”。 在您的tableViewCell从Nib唤醒的情况下,添加以下行: self.collectionView.register(UINib.init(nibName:“ CollectionViewCell”,包:nil),forCellWithReuseIdentifier:“ collectionViewID”) 生成并再次运行。 它将起作用。 这是更新的tableViewCell的代码: 故障排除步骤: 我的标识符是否已分配并正确? 我是否已从我的collectionView拖动到Xib文件中的文件所有者? 希望这会有所帮助。 如果您愿意,请给我鼓掌。 如果有问题请发表评论。 伊恩(Ian)-aestusLabs
ამოცანაა。 სთორზეაპლიკაციას1000-დანშეფასებასშეფასებასშეფასებასშეფასებასშეფასებას。 გაუსვლელადგაუსვლელადგაუსვლელადგაუსვლელადგაუსვლელადკონტექსტიკონტექსტიკონტექსტი。 იდგაiOSპლატფორმაზეპლატფორმაზეშემოგვთავაზესშემოგვთავაზესსაერთოსაერთოსაერთოსისტემასისტემა。 ადვილია(ადვილია)。 მოთხოვნა365 365 3-365。 შეზღუდვაა。 ხვეწნამუდარით-მუდარით,მუდარით。 მოთხოვნამმოთხოვნამმოთხოვნამმოთხოვნამსმარტფონზესმარტფონზესმარტფონზესმარტფონზესმარტფონზესმარტფონზესმარტფონზე。 მიდგომა。 აპლიკაციასთანაპლიკაციასთანაპლიკაციასთანაპლიკაციასთანაპლიკაციასთანაპლიკაციასთანაპლიკაციასთანაპლიკაციასთანაპლიკაციასთან გამაღიზიანებელია,აპლიკაცია47გემუდარება5ვარსკვლავს。 მომენტიმომენტიმომენტიმომენტიგანწყობაზეაგანწყობაზეაგანწყობაზეაგანწყობაზეა。 გაგიჭირდეთგაგიჭირდეთგაგიჭირდეთგაგიჭირდეთგაგიჭირდეთგაგიჭირდეთ ბალანსიბალანსიბალანსიბალანსიბალანსიბალანსი მომხმარებელიჯერ19-ჯერმემე-20წარმატებულიგაკეთებაგაკეთებაგაკეთებაგაკეთება。 დამტკბარიადამტკბარიადამტკბარიადამტკბარიაჩახუთვარსკვლავებასჩახუთვარსკვლავებასჩახუთვარსკვლავებასჩახუთვარსკვლავებასჩახუთვარსკვლავებასჩახუთვარსკვლავებასჩახუთვარსკვლავებასჩახუთვარსკვლავებას。 კლასიკლასიკლასიმენეჯმენტშიმენეჯმენტშიმენეჯმენტშიმენეჯმენტშიმენეჯმენტში。 მხოლოდმხოლოდ10. iOS 10.3 -დანდან。 ფრაგმენტიფრაგმენტიფრაგმენტიფრაგმენტირომელიცგანხილულიგანხილულიგანხილული კარგად。
测试驱动开发(TDD),一种敏捷的软件开发方法,通过为我们的业务逻辑单元编写测试用例,可以使开发过程更无错误,并使代码更稳定。 如果您是TDD的新手,并且想稍微进一点,那么您想查看一下我先前关于测试驱动开发(TDD)的博客。 在iOS中,Xcode使单元测试比任何其他现代编程工具都容易得多。 让我们立即跳入编码,开始我们的冒险。 我们将使用MVVM构建我们的项目,因为它更易于进行基于组件的测试,因为我们对测试我们的业务逻辑而非控制器更感兴趣。 如果您不熟悉MVVM,那么您想快速浏览一下我关于MVVM的博客系列。 我们将学到什么? 我们将不仅致力于学习如何使用Xcode在iOS中编写测试用例,还将关注如何思考和计划我们的测试用例。 在Xcode项目中启用UnitTestCase 在新项目中启用。 添加现有项目。 ->要在现有项目中添加单元测试用例,我们需要添加一个新的iOS Unit Testing Bundle目标。 我们要建造什么? 我们将构建一个示例应用程序,该应用程序将获取场所(如商业场所和商业场所)的列表并显示它们。 因为我希望此博客非常简单,所以将从.json文件中获取位置列表。 让我们检查将用于DemoTests项目的UML类图。 下载 用于初始项目设置 的 启动程序项目, 即UT_Starter1。 入门项目具有上述屏幕的view , view模型和相应的测试文件。 作为#Rule1,我们需要编写有关Red-> Green-> Refactor流程的测试用例。 由于我们已经准备好编写测试用例,因此在Xcode中创建任何单元测试类时,都会生成一些自动生成的方法。 让我们继续学习该类中列出的所有方法: func setUp() 这是我们得到的最简单的Red案例。 因此,任何错误,即使是“未解决的标识符”也被视为红色案例。 绿色: 我们将编写最简单的代码来通过我们的测试用例。 导航到Place.swift 。 将以下代码放置在文件中。 在@testable import DemoTests下面写下@testable import DemoTests PlaceTests.swift 。 现在再次运行。 有用!! 您将在文件中看到绿色的勾号。 这意味着我们的代码已通过测试用例。 因此,我们已经成功地写下了绿色代码。 重构: 到目前为止,代码中没有太多可重构的,我们可以跳过这一部分。 […]