Tag: Swift编程

ReactiveSwift:实用功能与自定义扩展功能完美融合

如果您像我一样热衷于功能性反应式编程和大量的ReactiveSwift / Cocoa用户,那么有时您会发现自己在创建自己的扩展。 不久之后,您就会遇到信号(或生成器)和绑定共享相同名称的情况。 实际上的方法是对绑定使用单数名称(如objectValues ,对信号和生成器使用复数(如objectValues 。 在处理集合(例如objectsValue和objectsValues ,errr等)时,这有点难看。当属性被命名或包含value时,会发生什么情况–我将让您自己想象。 但是,如果您需要同时创建信号和生成器以及绑定,该怎么办? 您想要保持一致,并且不想使用长句子的后缀,例如objectValuesSignal和objectValuesProducer ,这就是命名空间扩展可以帮助您的地方! 用于“绑定”,“ Signals` and `生产者”的多个命名可确保没有命名冲突。 绑定,信号和生产者扩展的创建方式与以前几乎相同,但没有后缀或复数-只是Base简单的变量名。 使对象绑定目标,信号和生产者分别在foo.reactive.bind,foo.reactive.signal和foo.reactive.producer扩展中可用。 最后,乐趣和收益部分:

如何从头开始创建iTunes Samples Player? (第3部分)

注意:这是“如何从头开始创建iTunes Samples Player? (第2部分)”。 本文分为两个部分: 在ProgressView和标签文本中显示下载进度。 实现暂停,恢复和取消下载。 上一篇文章的最后一步是添加URLSession的委托方法。 URLSession中还有另一个委托方法,可提供进度的确切状态。 我们可以利用此委托获取当前的进度信息,并在TrackCell中使用新方法,更新标签和进度视图。 TrackCell中进行了一些更改。 删除了隐藏进度标签和progressView的行。 将进度视图的进度值设置为零。 下载完成后,我们将隐藏进度视图。 另外,在Main.storyboard中,删除进度标签上的默认文本“ Label”。 请注意,在底部添加了新方法updateDisplay。 生成,运行并点击下载。 在下载过程中和下载之后,您应该看到以下屏幕。 到此完成第1节 。 解决方案 :URLSession支持暂停/恢复和取消。 我们已经在单元格上隐藏了按钮。 当用户点击它们时,某些委托方法应触发。 这些方法应由SearchViewcontroller处理。 暂停,恢复或取消之类的操作应直接应用于活动下载。 为了进行这些更改,我们需要在T​​rackCell上声明三个新的委托方法。 然后,我们需要将按钮操作连接到IBAction方法,该方法将依次调用委托,在这种情况下为SearchViewController。 我们还在单元格行上进行了一些UI调整,以便与下载相关的控件仅在活动下载时出现。 完成的课程如下所示: 我们已经更改了Configure方法TrackCell的签名,以便传递活动的下载对象。 更改“ SearchViewController + TableViewDelegate”内部的方法调用以通过活动下载。 cell.configure(跟踪:跟踪,下载:跟踪。下载,下载:downloadService.activeDownloads [track.previewURL]) 生成,运行,搜索,下载,暂停,恢复,取消。 该版本的源代码在GitHub中可用。 希望您能够成功看到具有预期功能的上述屏幕。 这标志着我们为本文设定的所有目标的完成。 学习愉快!

Storyboardable协议:更快地初始化基于Storyboard的视图控制器

我最近决定开始在Instagram上发布我的Swift编程语言经验。 该平台似乎只限于异国风情的度假照片和猫照片,但我相信它也可以用于承载惊人的视觉代码和构建应用程序的过程。 这里的挑战实际上是将好的代码和想法与呈现它们的美学方法结合在一起。 我的第一篇文章与情节提要有关,这是Xcode的可视化界面,用于构建具有漂亮的拖放功能的应用程序UI。 如果你问我的话,相当合适。 事不宜迟,请查看嵌入的帖子,如果喜欢的话可以给它一些爱,并在末尾查看完整的代码! 原始Storyboardable Instagram帖子 分镜脚本代码

IOS面试常见问题解答(2018年10月)

希望您喜欢这些文章及其对您的帮助,让我们从10月的第1部分开始。 对于旧月份:请检查— 2018年IOS面试常见问题解答 回答:这是两个或多个任务可以独立运行的条件,即使其他任务也同时执行。 NSOperation和NSOperationQueue 大中央派遣(GCD) 队列类型 定义队列类型对于获得所需的结果很重要,并且将有助于确定代码块的执行方式。 同步 :执行过程中当前线程将被阻塞 异步 :任务将在后台线程上运行,使当前线程可用于其他任务 串行 :串行队列一次执行一个块,顺序按输入顺序(FIFO —先进先出)。 您可以创建多个串行队列。 如果您有四个串行队列,它们可以同时异步运行所有四个任务,优点是您可以控制代码块的执行顺序(FIFO),并且它们在每个串行队列上都是线程安全的。 并发 :并发队列有可能一起执行这些块(一次默认为2个块),从而允许进程并行运行。 缺点是您可能无法完全控制哪些任务最先完成。 以下是5个全局队列及其对应的QoS类,它们提供了有关其功能的更具体定义。 回答:我们将介绍以下内容: RETAIN , RELEASE , AUTORELEASE RELEASE , ALLOC , DEALLOC , COPY和NSAUTORELEASEPOOL 。 手动参考计数 Objective-C中的内存管理涉及四个基本规则。 如果遵循这些规则,则不会泄漏内存或导致指针悬空。 规则1.如果您使用“ ALLOC”,“ COPY”或“ NEW”开头的方法创建对象,那么您就拥有它。 在这里您创建了一个保留数为1的新对象,这自动使您成为所有者。 规则2.如果您 RETAIN 对象,那么就拥有它。 在这里,您可以在对象上调用retain ,这会使保留计数增加一。 规则3.如果拥有,则必须发布。 在这里,您可以在对象上调用release方法,从而将保留计数减少一。 当您调用release且保留计数达到零时,对象将通过调用dealloc释放自身。 这意味着您永远不要 直接 调用 dealloc […]

维吾尔古拉达塔里/萨伊特勒姆勒里。

GitHub上的组织库,它存储库中的文件由olmasıamacıyla的Gist文件组成。的文件来自kullanarak burada dabazıaçıklamalardabulunmak istedim。 —由GitHub的 ❤️ 托管 — Neyse konuyabaşlangıcıalalım。 Şimdiöncelikletarih ve saati uygulamadanasılalmamızgerekli ve Swift 3 de beklenmeyen Date() formatı ilekarşılaşırsanızneyapmalısınız? Tarih-saat olarakeğer全球时间 Uygulama olacaksa UTC(世界时区) kullanmanızkesinlikleşart。 她的durumda bunukullanmanızbenim tercihimolacaktır。 TR’deEşGüdümlüEvrensel Zamandenmiş。 “ Evrensel Zaman Dilimi ” demek yeterli gibi。 EşGüdümlüEvrensel Zaman – Vikipedi EşGüdümlüEvrensel Zaman(世界标准时间),pekçokülkedebazalınanmedenîve bilimsel zaman。 1963年yılındakullanılmayabaşlanm… tr.wikipedia.org UTC –现在的确切时间– Time.is 现在的确切时间,时区,时差,日出/日落时间以及UTC的关键事实。 […]

Swift 4简介系列1.7 — Swift运算符

Swift支持大多数标准运算符和其他编程语言使用。 此外,Swift可提高使用这些运算符时的安全性。 所有标准运算符均分为3种类型。 他们是: 一元运算符:一元运算符可用于单个操作数。 它可以放在操作数前面(前缀),也可以放在操作数后面(后缀)。 前缀一元运算符的示例是-variable1 , -10和!variable2 。 后缀一元运算符的示例为variable3! 二进制运算符:二进制运算符在2个操作数之间工作。 二进制运算符的示例是a + b,c / d和e * f 三元运算符:三元运算符使用3个操作数。 Swift中只有一个三元运算符; 它是三元条件运算符(a?b:c) 在语句1 + 2中,加号是运算符 ,数字是操作数 。 赋值运算符 最常见和最基本的运算符是赋值运算符。 基本语法如下: = 例: var sampleNumber1 = 0 sampleNumber1 = 256 让sampleNumber2 = 242 sampleNumber1 = sampleNumber2 打印(sampleNumber2) 对于元组,我们可以一次将多个值分配给多个变量/常量。 例: 令(a,b,c)=(12,2.78,“测试”) 一种 b C 赋值运算符不返回值 与其他编程语言不同, Swift赋值运算符不返回数字或布尔值 […]

Swift 4.0:自动引用计数(ARC)-第2部分

欢迎回到本教程的自动引用计数第二部分! 在第一部分中 ,您了解了ARC的一些基本概念,例如weak , Unowned 以及如何使用weak和unowned负责解决参考周期问题。 在最后一部分中,您将了解最后一种情况,在这两种情况下,两个properties都应具有值,并且初始化完成后,两个属性都不应该nil 。 此外,您还将学习如何克服Closures的强参考周期 。 让我们直接深入。 假设我们有一个Country和President类。 这些类中的每一个都将另一个类的实例存储为变量。 这意味着每个国家都应该有一个总统 ,每个总统都应该与一个国家联系在一起。 为了满足此要求而不会导致内存泄漏,您需要声明一个属性(在我们的示例中为Country类中的countryPresident )作为隐式展开的可选Property 。 这可以通过将感叹号放在其类型注释的末尾( President ! )来完成。 而另一方面,您需要将其声明为无主财产(在我们的country中为President阶级)。 国家 类别 { 让 countryName: 字符串 var countryPresident: 主席 ! 初始化 (countryName: String ,PresidentName: String ){ 自我 .countryName = countryName self .countryPresident = 总统 (presidentName:PresidentName,国家/地区: self ) 打印 (“国家正在初始化”) } deinit { […]

Swift中的NSAttributedString

通过StyleRegEx进行正则表达式渲染 基于标签的渲染很有用,但您也可以将正则表达式匹配样式应用于字符串。 这是通过创建StyleRegEx对象的实例来完成的: 字符串和属性字符串串联 使用+运算符,使用SwiftRichString在纯字符串和属性字符串之间进行连接非常容易! 结论 想更多地了解SwiftRichString的所有机会? 在GitHub项目页面上,您可以找到该项目所有功能的完整文档。 SwiftRichString可用于所有Apple平台,并可通过CocoaPods,Swift PM或Carthage安装。

Swift vs Obj-C:开发人员的观点

许多对开发iOS应用程序感兴趣的人心中有一个主要问题,即应该学习Swift还是使用Objective-C来制作iOS应用程序。 现在这是一个非常普遍的问题,因为这两种语言似乎仍然是彼此的竞争者。 在Swift被Apple宣布为一种新的编程语言后,它在开发人员社区中引起了很多惊喜和困惑。 作为Objective-C的替代产品,Swift被认为比其前身更好。 但是真的是这样吗? 仅在完成了Swift中的几个主要应用程序之后(从头开始),我才能够找到这些问题的答案。 让我们从外部看一下Swift与Objective-C的战斗,并试图定义两者之间的优势。 Swift比Objective-C的优势 1. Swift更快 。 它的性能与C ++的性能相匹配,后者被认为是最快的算法计算算法。 Objective-C较慢,因为它包含C API旧版。 我们都知道苹果如何努力提高Swift的速度。 到目前为止,他们实际上已经非常成功地做到了。 例如,Swift 2.0在几种计算算法中击败了C ++。 例如,使用Swift可以更快地完成常见的搜索算法: 比Objective-C快2.6倍 比Python 2.7快8.4倍 2. Swift更安全。 Swift的语法和语言构造排除了Objective-C中潜在的几种错误类型。 这种稳定性意味着更少的崩溃和意外行为。 当然,它不能防止编写错误的代码,但是可以更好地保护开发人员避免发生不必要的错误。 可以将其称为“质量控制”。 一个很好的例子就是迅速的“可选”功能。 让我们看一下下面的实现: var firstName:字符串? firstName =“ abc” 警卫队让名=名,其他{ 返回 } //在未包装firstName的控制语句之外使用名称 print(“ \(name)”)//“ abc” 所有这些使我们有理由将Swift视为一种安全的编程语言,这非常重要。 3. Swift是竞争者 。 Swift是一种更紧凑的编程语言。 更少的代码等于更好的可读性。 当然,这个事实并不意味着代码简单。 有时,编写起来可能非常困难,但是却带来了更多好处,并且具有很高的可重用性。 这不能应用于Objective-C。 例如,有一个著名的应用程序,称为“ Lyft”。 […]

一个简单的面向协议的键盘避免解决方案

我想共享一个整齐的即插即用键盘,避免针对iOS的解决方案,而我经常将其加入我的项目。 确保您的视图不会被键盘遮盖是iOS开发中的其中一项任务,您不必每次启动项目时都从头解决,如果不需要的话。 这也是我避免引入依赖项的原因,因为实现自己并不会花费太多时间。 诸如TPKeyboardAvoiding类的库在处理和处理边缘案例TPKeyboardAvoiding表现出惊人的效果,但是,如果库中存在错误或它不适用于您的设置,并且您不了解该解决方案的工作原理,那么在使用SOL之前,您几乎都是SOL维护人员可以修复它,或者您可以分叉库并自己修复错误-那时,我认为您也可以自行开发。 每个避免键盘的解决方案都取决于观察即将出现键盘时iOS发送的通知。 这些通知包含有关键盘的大小和位置的信息。 系统可以向您发送的四个通知如下: UIKeyboardWillShowNotification UIKeyboardDidShowNotification UIKeyboardWillHideNotification UIKeyboardDidHideNotification 如果视图在UIScrollView ,那么避免键盘只是调整contentOffset的问题,这样输入视图的框架就不会被键盘遮挡。 这是一个协议,描述了UIViewController为了避免键盘必须知道的所有运动部件。 而已! 当用户在输入之间进行导航时,您要做的就是保持对activeInputViewFrame重置,以使键盘activeInputViewFrame 。 全面披露,我还没有将它作为一种万能解决方案进行测试。 我在一些非常相似的视图层次结构中使用了此方法:您有一个UIScrollView约束到VC的边缘,该边缘具有一些包含UITextField / UITextView子视图。 您可能需要根据设置进行一些调整,但是希望通过在通知处理程序中设置一些断点来跟踪发生了什么问题很容易-这种解决方案的优点是非常简洁。 我希望这可以帮助您解除封锁或教会您一些新东西! 如果您有任何疑问,请随时在以下位置鸣叫我或发表评论。