Tag: Swift编程

Swift 5.0的新功能

了解Swift 5.0中可用的关键功能。Swift 5.0的主要目标是使语言达到ABI稳定性。 这将使稳定的Swift运行时能够由OS供应商部署,并且可以通过可执行文件和库进行链接。 Swift 5的新改进: 增强字符串文字定界符以支持原始文本(SE-0200) 将结果添加到标准库(SE-0235) 修复ExpressibleByStringInterpolation (SE-0228) 引入用户定义的动态“可调用”类型(SE-0216) 处理将来的枚举案件(SE-0192) 拼合由“ try?”产生的嵌套可选内容 (SE-0230) 将isMultiple添加到BinaryInteger (SE-0225) 特别说明: 在运行iOS 12.2,watchOS 5.2和tvOS 12.2的设备的构建变体中,Swift应用程序不再包含用于Swift标准库的动态链接库和Swift SDK覆盖。 因此,在部署用于使用TestFlight进行测试或为本地开发分发而精简应用程序存档时,Swift应用程序可以较小。 为了减少Swift元数据占用的空间,现在,在Swift中定义的便捷初始化程序正在调用Objective-C中定义的指定初始化程序时,才提前分配一个对象。 阅读这些改进说明,以获取更深入的知识,以增强您对即将发生的变化的了解。 增强字符串文字定界符以支持原始文本(SE-0200) 扩展定界符 我们的设计添加了可定制的字符串定界符。 您可以使用一个或多个# (磅,数字符号,U + 0023)字符填充字符串文字: “This is a Swift string literal” #”This is also a Swift string literal”# 自定义转义分隔符 使用自定义边界定界符的字符串在前导反斜杠后镜像其英镑符号,如以下示例所示,它们产生的结果与前面的字符串文字相同: #”This string has an \#(interpolated) item”# ####”This […]

Swift并行编程:操作

在Swift的并行编程:基础知识中,我介绍了许多低级选项来控制Swift中的并发。 最初的想法是在一个地方收集我们可以在iOS上使用的所有不同类型的方法。 但是在编写该指南时,我意识到有太多方法可以在一篇文章中列出。 因此,我决定减少高级方法。 我在上一篇文章中确实提到了操作,但是让我们更仔细地研究它们。 操作队列 让我们回顾一下:运营是Cocoa在GCD上的高级抽象。 准确地说,它是dispatch_queue_t的抽象。 它使用具有可在其中添加任务的队列的相同原理。 对于OperationQueue,这些任务是Operations。 在执行操作时,我们需要知道它正在运行的线程。 与往常一样,如果要更新UI,则需要MainOperationQueue。 操作在其生命周期中会经历不同的阶段。 当添加到队列中时,它处于挂起状态。 在这种状态下,它将等待其条件。 一旦所有这些都满足,它将进入就绪状态,并且如果有空闲插槽,它将开始执行。 完成所有工作后,它将进入完成状态,并将其从OperationQueue中删除。 在每种状态下(“完成”除外),均可取消操作。 消除 取消操作非常简单。 根据操作,取消可能具有完全不同的含义。 例如,运行网络请求,取消操作可能导致停止该请求。 在导入数据时,这可能意味着放弃您的交易。 您将负责给出取消的意思。 那么如何取消操作? 您只需调用.cancel()。 这将切换isCancelled属性。 这就是iOS为您服务的全部。 由您决定是否取消并相应地执行操作。 请注意,取消操作会导致它放弃所有条件,并立即开始立即执行以进入完成状态。 进入完成状态是将操作从队列中删除的唯一方法。 如果忘记检查取消标志,即使您取消了操作,也可能会看到正在执行的操作。 另请注意,这容易受到比赛条件的影响。 按下按钮并设置标志需要几微秒。 在此期间,操作可能会完成,并且取消标志不再起作用。 准备就绪 就绪状态仅由单个布尔标志来描述。 这意味着该操作已准备好执行,并且正在等待队列启动它。 在串行队列中,将首先执行进入就绪状态的操作,即使该操作可能位于队列中的位置9。 如果有多个操作同时进入“就绪”状态,则优先级将决定。 仅当一个操作的所有依赖项都完成时,它才会进入就绪状态。 依存关系 这是Operations真正重要的功能之一。 我们可以创建任务,具体说明其他任务必须先执行才能执行。 同时,有些任务可以与其他任务并行执行,但是是后续操作的依赖项。 这可以通过调用.addDependency()来完成。 默认情况下,任何具有依赖关系的操作都将在其所有依赖关系完成后才进入就绪状态。 但是,由您决定取消依赖项后如何继续。 这使我们能够严格命令我们的运营。 我认为这不容易阅读,因此让我们创建自己的运算符(==>)来创建依赖项。 这样,我们可以说,按从左到右的顺序执行操作。 关于依赖项的好处是,它们甚至可以跨不同的OperationQueue。 同时,这可能会导致意外的锁定行为。 例如,您的UI可能会结结巴巴,因为更新取决于后台操作并阻止其他操作。 注意循环依赖性。 […]

快速收集类型…

Swift提供了三种主要的集合类型来存储值的集合。 他们是: 数组→有序 价值观的集合 字典→键值对/关联的无序集合 集合→唯一值的无序集合 迅速地,所有这些收集类型都严格限制了它们的类型,这意味着我们不能在用特定类型定义的这些类型中插入其他类型的值。 因此,由于存在强类型系统,我们可以肯定地在检索中,该元素与定义该集合的类型相同。 注意 : 这些集合可以使用任何类型声明和定义,只要在项目中定义了该类型即可。 在Foundation Framework中,这些集合实现为通用集合,因此可以使用任何类型定义它们。 注意 : 快速编写KVO和KVC编译代码时,不会编译用用户定义类型定义或声明的集合。 因为Objective -C Runtime不知道那些迅速定义的用户定义类型。 集合的可变性: 在声明集合类型时,即数组,字典或集合,如果将其分配给变量,则该集合将是可变的(可以更改)。 这意味着我们可以通过添加元素,删除元素或修改它们来更改集合。 在定义集合时,如果将其分配给常量,则它是不可变的(其大小和内容无法更改)。 注意 : 在不需要更改集合的情况下,使用不可变集合是一个好习惯。 因为对于不可变类型,其编译时性能和优化要优于可变计数器部分。 ***所有屏幕截图均为自解释,并提供注释说明。 请通过他们了解更多详细信息*** →数组:将相同类型的值存储在有序列表中。 相同的值可以在列表中的不同位置多次出现。 句法 : – Array [ ElementType ] //这是常用的简写语法 在上面的语法结构中, ElementType是允许存储的值数组的类型。 Swift的Array类型还提供了一个初始化程序,用于创建具有特定大小的数组,其所有值均设置为与初始化程序传递的值相同。 我们使用重复参数传递所需类型的值,并使用参数count传递值在数组中需要重复的次数 。 我们可以通过添加与加法运算符兼容的相同类型的现有数组来创建新数组。 我们还可以使用数组文字初始化数组,这是将一个或多个值写为数组集合的一种简便方法。 在下图中, firstArray用Array文字初始化。 访问和修改数组: 我们通过数组的方法和属性或使用下标语法来访问和修改数组。 我们可以使用下标语法从数组中检索一个值,在数组名称后紧跟的方括号内传递值的索引。 在访问下标语法时,它必须有效,否则我们会遇到运行时错误。 →集合:将相同类型的不同值存储在无序列表中。 当我们要存储唯一值并且不需要顺序时,我们更喜欢使用它们。 类型必须是可哈希的才能存储在集合中。 […]

SWIFTip#1:本周的随意见解

快速学习。 这是每周的见解,可增强Swift良好实践的技能。 如果您对快速学习者有更好的建议,请发表评论。 谢谢。 #常量 Swift中的命名空间— Cocoacasts 为了避免与其他库和框架发生命名冲突,Objective-C类需要具有唯一的名称。 那… cocoacasts.com 在Swift中使用全局常量的乐趣 摆脱该常数struct medium.com #CodeDiscipline&清洁度 领域/ SwiftLint SwiftLint —一种用于实施Swift样式和约定的工具。 github.com #JSON到SwiftModelsGenerator JSON到Swift,TypeScript,Go,C#,Java等::: quicktype 给定示例JSON,quicktype输出类型和序列化器,以便在Swift,Go中快速读取和写入该数据… quicktype.io json4swift.com | 在线JSON到Swift模型生成器 在这个技术时代,我们的动机很简单; 便利和自动化,不应该将JSON与Swift结合使用…… www.json4swift.com CuteBaby:Mac App Store上的Swift JSON模型 阅读评论,比较客户评价,查看屏幕截图,并了解有关CuteBaby:Swift的JSON模型的更多信息。 下载… itunes.apple.com #VectorImageXcode Xcode 9中的矢量图像 在Xcode 6及更高版本中,我们能够将PDF矢量图像添加到Xcode资产目录中。 这是管理您的… jgonfer.com 的好方法 #OptimizingSwiftBuildTimes fastred / Optimize-Swift-Build-Times Optimizing-Swift-Build-Times –关于优化Swift项目的编译时间的建议集。 github.com

第34周Swift故事

1. 如何为中心选项卡栏项目创建自定义动作? – Yalcin Ozdemir 2. iOS中的表单-第1部分– Eric Downey 3.蒸气3系列III-测试–吴胜华 4.在Swift中同步异步– Mladen Despotovic 5.通过使用设计模式简化iOS代码– Arlind Aliu 6.基于Xcode方案的不同应用程序显示名称– Jesus Guerra 7. Swifty Firebase API @ Ka-ching —第3部分– Morten Bek Ditlevsen 8.具有Kitura编码路由的服务器端Swift CRUD API – Alfian Losari 9.在斯威夫特等待,没有失败的承诺–姆拉登·德斯波托维奇 请为这些出色的作家提供一本书,以感谢他们对Swift2Go出版物的贡献。 任何愿意在Medium上编写Swift故事的人都应邀以作家的身份加入Swift2Go出版物,并为社区做出贡献。 您可以通过发送电子邮件至 info@swift2go.com 进行 申请 。 如果您想帮助发展这个社区,可以通过与您的朋友分享出版物或其中的故事来做到这一点。 🚀 关注我们并继续关注更多Swift故事。 👇

Xcode项目中的多目标用法

有多种方法可以向用户展示应用程序的特殊功能。 向用户展示特殊功能的一种方式是拥有应用的多个版本(如Lite和Pro)。 在这种情况下,Xcode中的目标扮演主要角色。 实现此要求的另一个不好的方法是每个应用程序都有不同的项目。 但是,对一个项目有多个目标可能会生成多个版本的应用程序。 目标是通过在Xcode中运行“ build”创建的最终产品。 它可能是一个应用程序,一个框架,一个静态库或一个单元测试包。 无论是什么,它通常对应于“已建产品”文件夹中的单个项目。 在Xcode中,“文件”->“新建”->“项目”->“单视图应用程序”将在下图中填写必填字段后创建一个简单项目。 现在,您的项目导航器如下所示。 您可以在Storyboard和AppDelegate / ViewController中进行任何基本的UI和代码更改。 在此“ SimpleApp”中,有一个UIImageView作为ViewController的视图的背景图像,还有一个UILabel,其中包含用于区分应用程序目标的文本,如下所示。 现在,单击ProjectName(SimpleApp),您可以看到“目标”部分。 右键单击要在其中添加特殊功能的目标。 点击“复制”。 您将看到以下警报。 只需单击“仅重复”。 它将复制所选目标。 注意: 存在此对话框的原因是为您提供一种使用两个不同目标在单个项目中创建应用程序的iPhone和iPad版本的简便方法。 如果这是您要执行的操作,则可以选择“复制并转换到iPad”。 但是,在走这条路之前,您应该考虑使应用通用,而不是使应用的iPhone和iPad版本分开。 只需点击“返回”键,通过选择新的目标进行重命名即可进一步使用。 重命名两个目标后,“目标”部分将如下所示。 要解决的另一个命名问题是目标的方案。 方案定义了当您按下“ Build”,“ Test”,“ Profile”等时会发生什么。通常,每个目标都有至少一个方案。 我们必须通过单击上方菜单中的“管理方案”来重命名方案。 我们只需按如下所示的“ Return”键即可重命名方案。 重命名过程后,单击“关闭”。 在以上所有过程中,Xcode将生成一个新的plist文件并将其添加到您的项目导航器中。 这些plist文件名与目标服务器的名称不一致。 因此,我们必须使用相同的“返回”键方法来重命名它们。 重命名后,我们必须在Xcode Project设置中设置正确的plist文件。 还要根据需要更改包的显示名称。 现在,您可以使用多个目标了。 在单个代码库上运行时,我们需要某种编程方式来确定当前正在运行的产品(目标),以便您可以适当地做出这样的决定。这是Preprocessor Macro发挥作用的地方。 每个目标的Plist都有一些预处理器宏来标识您的工作环境。 我们必须设置一个自定义宏才能在这种情况下使用。 要添加自定义宏,请单击ProjectName(SimpleApp)->要添加宏的特定目标->构建设置。 然后按单词“ Macro”过滤。 然后,您将找到“预处理器宏”部分。 您会在这里看到Debug版本已经有了一个名为DEBUG = 1的宏。 […]

如何在Swift 4中使用CIFilter来模糊图像—使用Swift进行编程

在 programmingwithswift.github.io上 查看我的其他帖子 这将是一个快速教程,向您展示如何在Swift 4中使用CIFilter轻松模糊图像。 在上面的图像中,我创建了一个将UIImage模糊化的函数。 该函数通过接受两个参数来工作。 第一个参数是您要模糊的UIImage,第二个参数是模糊半径量。 在函数内部,我要做的第一件事是将UIImage转换为CIImage,以便可以在其上使用CIFilter。 接下来,通过使用所需的过滤器类型初始化一个新的过滤器来创建过滤器。 在这种情况下,我使用CIGaussianBlur 。 过滤器初始化后,我设置了需要应用过滤器的图像。 这发生在我初始化过滤器下面的那一行。 告诉滤镜要使用什么图像后,我便设置了所需的模糊半径。 这将使用该函数采用的第二个参数。 完成所有这些操作后,我从blurFilter获取输出图像,然后从输出图像创建新的UIImage,并在函数末尾返回新的UIImage。 上图显示了如何使用该功能。 我创建了一个新的图像变量,该变量将存储blurImage函数的返回值。 之后,我创建一个新的UIImageView并将图像设置为上面返回的模糊图像。 我为图像视图创建一个框架,设置内容模式,然后将其作为子视图添加到视图控制器视图,仅此而已。 如何使用SKStoreReviewController教程: https ://medium.com/programming-with-swift/skstorereviewcontroller-tutorial-programming-with-swift-31a4faded01f 如何使用Swift读取条形码或QRCode: https : //medium.com/programming-with-swift/how-to-read-a-barcode-or-qrcode-with-swift-programming-with-swift-10d4315141d2

最后了解Swift中的可选内容!

很难理解Swift中的可选概念吗? 感觉被Swift代码中不同的“?”和“!”淹没了吗? 阅读本教程以最终了解主选项! 您将在本教程中学到什么: 什么是可选选项以及如何使用它们 如何安全解开可选项 理解Swift语句中的“?”和“!” 什么是可选的? 🎁 在Swift中,变量和常量不能为零。 这意味着我们不能为他们分配任何东西。 因此,与其使用可能成为 零,并崩溃我们的程序,我们使用可选的。 为了创建一个可选的,我们必须声明一个带有类型注释的变量,但是除了给它赋值之外,我们在数据类型之后写一个“?”。 现在,我们可以为选项分配一个值或分配nil,因为可选参数可以代表这两种情况。 有几种方法可以访问可选内容中的值(以便从容器中“获取内容”)。 强制展开🔍 当我们想强制打开可选的包装时,我们告诉程序我们肯定知道可选的包含一个值并且不是nil。 我们用“!”强行打开可选选项。 但要注意 :如果在可选参数为nil时执行此操作,则程序将崩溃。 因此,只有在绝对确定可选选项不是nil时,才应使用强制展开。 为了确保我们的可选不为零 在拆开包装之前,我们可以使用一种称为可选绑定的技术。 可选装订🤓 我们可以使用if-let语句以安全的方式打开可选的包装。 因此,我们编写了一个if语句,仅在检查可选值是否包含值之后才解开可选值。 我们通过尝试将可选值分配给常量来检查这种情况。 如果可选是 nil我们的代码将返回false,因为如我们所知,常数不能为nil。 但是,如果可选值包含一个值,我们可以将其分配给常量,并且满足if语句的条件。 然后,我们可以在if语句中使用已声明的常量,并将其与print语句一起输出。 注意:声明的常量仅在if语句内可用,不能在外部使用。 也可以一次具有多个if-let语句: 当然,我们也可以使用变量代替常量。 然后,我们可以在语句中更改其值。 每当不确定不确定可选值是否包含值时,请使用可选绑定技术。 可选链接⛓ 您还应该了解一件事:可选链接。 当查询或访问可选属性,方法等时,Swift中使用了可选链接。 为了理解这一点,我们创建了一个Person类。 现在,我们声明该类的可选。 可选内容现在可以包含Person类的实例,也可以包含nil。 要访问该类的属性和方法,我们使用可选链接。 为此,我们在调用属性或方法之前用“?”标记可选项。 如果可选包含nil,则该语句也将返回nil,但是与强制展开不同,它不会崩溃。 如果可选内容包含Person类的实例,则我们的代码将执行相应的代码。 如果我们的语句返回一个值,则该值本身也总是可选的。 要访问它,我们还必须打开它。 结论🎊 希望您理解了Swift中的可选概念。 关键是,可选字段可以表示nil或一个值,可以使用强制展开或可选绑定对其进行访问。 您还可以通过可选链接对可选对象执行操作! 如果有不清楚的地方,请随时在评论中提问或给我写消息。 我会尽快回复(: […]

UrbanThings @ SwiftSummit 2016

首个— SwiftSummit 2016 —优步— AirBnb UrbanThings移动部门负责人Mark Woollard前往旧金山,探索使用Swift编程语言的尖端解决方案。 他分享了自己的经历的高潮和低谷,以及与糕点的对话如何使他与一个编码偶像面对面。 介绍 几个月前,为我提供了参加今年在旧金山举行的SwiftSummit的机会,经过一番考虑,我认为往返于英国往返24小时的旅行时间值得参加为Swift编程语言。 因此,与我的其他第一人一样,作为一个住在伦敦以外并使用我自己的汽车出行并且在伦敦使用火车/地铁/租车服务的人,我还没有尝试Uber。 我决定应该了解所有内容,并将其用于旅行的适当行程。 我还没有使用AirBnb,因此,为了发现其中的一些破坏性服务,通过AirBnb预订了带有“ Trish”字样的旧金山住宿,并查看了住宿类型,评论,位置和价格。 最后有更多关于这些的内容,但让我们转向会议本身… 会议地点是令人惊叹的美术宫。 我检查了一下,拿起了我的名字标签,并充分利用了互补的糕点和咖啡。 我发现自己与另一位与会者交谈,原来是Ray Wenderlich(@rwenderlich),他经营着一个著名的编码教程网站。 因此,我得出结论,在这两天中应该有一些有趣的人要与之交谈。 我汇总了最有趣的演讲摘要,但请务必在swiftsummit.com上查看完整的程序。 我参加了每个演讲并从中脱颖而出,SwiftSummit团队在组织一次有意义的活动方面做得非常出色。 为Swift编译器做贡献-Ayaka Nonaka(工作流程) Ayaka(@ayanonagon)进行了有趣的演讲,讲述了她如何最终为Swift编译器贡献了一个错误修复程序,真正展示了其开源模型的优势。 面对现实,我看了一下它首次公开发行时的情况,但没有做出任何调整。 这次演讲重新激发了人们对该项目的兴趣,自从会议开始,我已经开始安装Linux系统。 我发现了Linux Foundation实施中一个看似直接的问题,但是现在我最终通过Linux上的编译器和异常处理来追溯到更重要的问题。 信息已反馈给JIRA,调查仍在继续! 案例研究:Swift与约150名工程师— Tuomas Artman(Uber) Tuomas(@artman)让我们了解了在Uber中运行大型开发团队的感觉,以及他们如何将现有的Obj-C代码库迁移到用Swift编写的全新体系结构。 他提到Swift更适合满足公司的未来计划,此举无疑是值得的投资。 他还谈到了他们在此过程中遇到的一些问题。 值得一提的是,重新编写的应用程序在会议召开前几天就已上线,可以肯定地说,它使我绕过了旧金山,完全没有任何问题。 “显然,我们的开发人员有很多知识要向同行传授!” 像钟声一样清晰:共享技术专长— Laura Savino(自由职业者) 这次演讲与Swift无关,但仍然引起了深思。 劳拉(@savinola)是一位从事发展的老师。 在要求丈夫教她的编程知识之后,他给了她一份《 K&R C编程》以供阅读。 显然,我们的开发人员有很多知识要向同行传授。 演讲提供了许多有关如何在此方面进行改进的提示,以及一些可以采纳的好主意。 对Swift的定量观察— Christopher Scott [BuddyBuild] Christopher(@chrisYVR)在BuddyBuild云托管CI系统上进行了一次演讲,概述了该服务提供了什么,并特别关注基于BuddyBuild中托管项目的分析对当前iOS开发人员的一些见解。 有趣的数据是,有多少iOS项目包括watch app或扩展,甚至有多少开发人员愿意在其他数据点中设置任何单元/ […]

为什么Swift 3.0是初创企业中的iOS应用开发热点?

自Swift推出以来,时间不多了。 但是,作为受到技术冲击的Apple家族的产品,它使它可以快速,轻松地进入技术电路。 周围的大多数初创公司和开发人员都对此表示欢迎,希望在竞争对手之前就占据前排的位置。 好吧,这场竞赛一直持续到今天,因为Swift 3.0的出现使它对于iOS应用程序开发的规模越来越大。 除了所有明显的原因之外,让我们详细了解是什么使该语言如此受欢迎。 Swift是一个纯粹的开源 当您说“纯”时,它意味着它具有开源的所有真实功能。 现在,作为开放源代码平台,它允许用户免费访问所有功能和资源,对于处于起步阶段的业务或刚刚从头开始的人们来说,它变得负担得起。 此外,Swift 3.0允许您自定义并打破Objective-C在iOS应用开发中遇到的入门障碍,这对于寻求更大灵活性和精益求精的现代企业来说,是非常理想的选择。 引入更多技术创新 借助Swift 3.0,开发人员可以享受其创造力,因为它提供了大量创新功能,可让他们构建高度吸引人的交互式应用程序。 使用Swift构建应用程序的代码和资源易于理解,并为您提供了与盟友进行协作的大量空间。 通过它,您可以同时与其他开发人员和并行资源结合使用,以从iOS应用程序开发尝试中获取最佳结果。 消除和纠正错误非常容易 使用Objective-C和Swift 3.0的方式不同,它们可以帮助您更正错误。 借助Swift 3.0,您可以连续不断地监视代码中的错误,从而轻松检测并破译错误。 就像情况一样,如果iOS开发人员在编写代码时犯了错误,则会立即对其进行注册,并为所有注册的错误维护日志。 这使得开发人员可以很容易地从中进行引用,并确保以后不会再次发生此类错误。 关键字更少,语法更少 在插入关键字和应用语法方面,在Swift 3.0上工作非常顺畅。 首先,因为您不需要像在C语言中那样对关键字添加’@’符号进行区分。 另外,在Swift 3.0中也不需要遵循严格的语法规则。 最重要的是,您不必在代码中添加括号或分号,这使得在Swift上进行编码变得非常快捷和流畅。 相关: 雇用最佳iPhone App开发公司的步骤 易于维护 许多开发人员会抱怨不同的已知语言的一件事是,随着时间的推移,很难对其进行维护和更新。 但是,Swift 3.0肯定不是这种情况。 通过使用该语言,iOS应用程序开发真的变得非常容易,因为通过易于参考和自动监视,错误检测和解决变得更加简单。 易于理解的代码进一步简化了对其的升级和完善,从而使其在将来的维护变得非常容易。 尾注 与其他可用选项相比,这些是将Swift 3.0用于iOS应用开发的一些主要优点和优点。 作为一家希望以较低的成本和快速的生产力推出它的初创公司,它就是完美的选择。 您需要做的就是找到合适的合作伙伴,并在Swift上开发您的产品。 或者只是学习语言并在专家的帮助下开始使用,您将获得保证的价值。