Tag: swift

快速链接方法-(不要与可选链接混淆)

我在说的api调用看起来像这样: 在这里,我们正在Almofire类上调用一个称为request的方法。 接下来是一个称为validate(statusCode:)方法,然后是另一个名为validate(contentType:) 。 最后,我们可以看到一个名为responseData的方法,该方法带有一个trailing closure ,该trailing closure返回api调用的输出。 它是如何工作的?? 好吧,逻辑很简单。 使函数可链接非常容易,并且可以允许我们使用几乎类似于DSL的语法进行编写。 我们将添加一个执行某些操作的新函数,然后返回 self 。 就这么简单。 让我们更清楚一点。 我们通常有一个init方法来初始化类的对象。 我们可以有多个designated convenience初始化程序,以使我们的工作更加轻松。 我们可以使用自定义参数来初始化类对象。 考虑一个叫做Celcius的类。 class Celsius {var temperatureInCelsius:Doubleinit(fromFahrenheit华氏度:Double){temperatureInCelsius =(fahrenheit — 32.0)/ 1.8} init(fromKelvin kelvin:Double){temperatureInCelsius = kelvin — 273.15} func printTemperature(){print(“温度为( temperatureInCelsius)”)}} 我们有两种初始化方法,一种以kelvin接受温度,另一种以fahrenheit接受温度。 下面的语法创建一个Celcius类的对象,并使用该对象,我们可以调用一个实例方法。 摄氏(来自开尔文:400).printTemperature() //打印温度为126.85 如果您知道上面的代码是如何工作的,那么很容易理解本文开头提到的almofire方法链接。 链接方法示例: 让我们创建一个APICaller类。 一个api调用通常有一个url ,一个http method和parameters 。 如果我们使用上述类进行API调用,它将看起来像这样。 let params = [“ key1”:“ […]

白俄罗斯MobileOptimized 2017 2017 #MOConf

MobileOptimized 2017于7月14日至15日在白俄罗斯明斯克举行。 第1天是“ 营业日 ”,第2天是“ 技术日 ”。 这次会议得到了许多公司和社区的支持👐 “ SATOSHI ”位于此板顶部的第四行。 这是第二天的时间表。我的演讲从13:00在iOS曲目👩‍💻👨‍💻开始 我谈到了使用REPL和Swift软件包管理器的Swift。 我的幻灯片如下。 为了清楚显示,我简化了示例。 我很高兴有很多与会者来听我的演讲,所以我很高兴与他们交谈! 🤓 变色龙贴纸🌀 这是我第一次访问白俄罗斯,但我喜欢在那里度过。 谢谢所有组织者和所有参加者! 😃

片段— Xcode

嗨,这是我的第一篇关于编程的文章,用英语,如果您发现下面的任何错误,您可以(或者更好,您必须)告诉我,我会尽快修复。 因此,今天我将讨论Xcode中的完成快捷方式。 在同一部分中,您可以使用故事板或xib进行工作,如UILabel,UIButton,UIViewController等,该工作表中包含许多代码示例,C Block typedef,C ++ Class Template,但很少有人知道我们可以添加(或删除)新代码段。 您只需要选择一段代码,在上面显示的框中单击并拖动它即可。 释放它时,将显示一个带有以下选项的弹出窗口: 标题 :将在列表中显示的标题。 摘要 :关于该快捷方式的一些解释。 平台 :IOS,tvOPS,watchOS,macOS(定义何时启用快捷方式)。 完成快捷方式 :这很重要,它将是我们用来调用快捷方式的名称。 语言 :快捷方式的语言,例如Swift,C,Objective-C等。 完成范围 :例如,如果您选择了Function或Method ,则可以在其中调用快捷方式 ,当您开始编写快捷方式的名称时,它就会出现在您选择的快捷方式中。 对话框字段供您编写代码。 因此,还有一件事情,当您调用一个方法并点击“ Tab”按钮时,它将把您的光标发送到下一个要完成的字段,在这里我们也可以使用代码来做到这一点: 例如: apiClass.get(,完成:{(数据)在 }) 现在,我们需要对其进行测试,放手 只需开始编写快捷方式apiClassGet的名称-记住方法内部: 然后点击“选项卡”或“输入”按钮 看,我们在注册正文或快捷方式时写了,现在此字段将显示为深蓝色。 如果在点击“ Tab”按钮时用放置了许多字段,则光标将移至下一个字段。 如果您有任何疑问或意见,请随时给我写信。

WWDC18:代码覆盖率,XCTest和XCUITest的新增功能

在WWDC18上,有一个有关“测试中的新增功能”的会议,描述了代码覆盖率,XCTest和XCUITests中的新功能。 它由Honzaand Ethan提出。 本届会议包括以下内容 xccov的代码覆盖率 从方案中选择测试 随机检验 并行测试 并行测试技巧 幸运的是,我已经在以前的博客文章中介绍了本次演讲中介绍的大多数内容。 由于xccov已随Xcode 9.3一起启动,因此我在个人博客和Medium上都写了一篇详细的博客文章,内容涉及xccov的所有功能。 Xcode 10宣布了Xcode 10的并行测试功能,我已经在行动博客文章中介绍了Xcode 10中的大多数并行测试,该文章也发表在了Medium上。 您随时可以随时在会话中观看实时演示。 但是,我们将简要介绍本届会议上提到的功能。 代码覆盖率 苹果已经发布了带有Xcode 9.3的新命令行工具xccov,用于检查Xcode代码覆盖率报告的内容。 我们可以通过编辑方案并在“测试”操作中选中“代码覆盖率”框来明确启用该方案的代码覆盖率。 使用代码覆盖率数据运行测试后,Xcode会将代码覆盖率报告生成到默认的派生数据目录中,该目录位于〜/ Library / Developer / Xcode / DerivedData中,您将在Logs / Test目录中看到生成的代码覆盖率报告。 我们将看到扩展名为.xccovreport和.xccovarchive的代码。 在Logs / Test目录中,有覆盖率报告(扩展名为.xccovreport)和覆盖率存档(扩展名为.xccovarchive)。 按照此实用程序的手册页,“覆盖率报告包含每个目标,源文件以及具有覆盖率信息的功能/方法的行覆盖率百分比。 Coverage存档包含报告中每个文件的原始执行计数”。 目前,我们可以使用xccov实现以下目的 从终端查看代码覆盖率报告 从代码覆盖率报告中吐出JSON。 列出所有已生成代码覆盖率的文件 查看一个特定文件的代码覆盖率报告。 观看如何查看实际的代码覆盖率。 这减轻了使用第三方工具以美观的格式显示Xcode代码覆盖率报告的麻烦。 我们也可以跳过不需要的目标的代码覆盖范围。 XCTest方案选项 使用Xcode 10,我们可以从方案中选择特定的测试,将测试随机化并并行执行测试。 我们可以通过更新方案来启用并行测试,并且在“测试”操作中,可以针对测试包选择“选项”以选择并行化选项。 我们也可以选择位置。 通过创建仿真器的克隆,测试可以扩展到并行化单个仿真器中的测试套件。 Xcode在后台创建了不同的运行程序流程,每个流程都分配了特定的测试。 可以使用xcodebuild工具从命令行运行XCTest。 使用Xcode […]

如何将完整的ObjectiveC应用程序转换为Swift

我们花了三天的时间,一直下降到两位数。 现在,无需再理会的错误了。 我们必须使用助手视图来并排修复剩余的错误。 大多数错误被证明是对类vars的可选类型的错误猜测。 Converter始终选择隐式展开的变量,而不是可选变量。 否则它将尝试猜测局部变量类型错误。 (您不需要在大多数时候声明变量类型,因为Swift可以推断出它们)。 只是因为我渴望看到该应用程序已构建,所以我选择了一条捷径。 我使用强制展开和强制强制转换只是为了消除构建错误。 我几乎不知道,以后我将为此付出高昂的代价。 一堆var允许转换后(转换器将所有变量都定义为var),我们有了一个内置的应用! 别这么大肆宣传,我们才刚刚开始。 是的,我们的应用正在构建中,但是没有返回任何数据并且在启动时崩溃。 我们花了接下来的100个小时进行调试,以查找所有 空错误 if not null检查,则错误, 以及许多可选性修复。 之后,我们的应用程序正在初始化。 那是“差不多”的铸造,还有另一个力解开错误。 有样式指南的原因。 它们可以帮助您按照设计使用的语言来使用该语言,并且可以在创建大多数错误之前将它们阻止。 当时,SwiftLint进行了营救。 您可以在Xcode上运行SwiftLint来查看所有样式指南异常,并快速对其进行修复。 我决心摆脱所有可选性错误,并尽可能与风格指南保持联系。 我甚至启用了加入规则。 修复样式不仅有助于提高可读性,而且还提高了我们对错误的信心。 我们在途中发现了其他错误。 我们摆脱了所有强制展开,强制转换,显式类型声明以及隐式展开的可选内容。 我们尽可能地if let和guard let语句成为可能。

在Xcode 9和iOS 11中启用无线构建/调试

Xcode菜单栏>窗口>设备和模拟器 设备和模拟器 选择您连接的设备。 选中“通过网络连接”框。 就这样! 设备名称旁边的网络图标表示已连接。 如果您遇到问题,请尝试在两个设备上打开和关闭Wifi; 并确保您可以从开发Mac实际ping您的设备。 您还可以通过转到“ 遥控器和设备”>“远程应用程序和设备”并从Mac配对来远程构建到AppleTV。 推特: @aaronykng IG: @ hi.aaron

IOS热门面试问答(2019年4月)第一部分

下一页 :IOS面试常见问题解答(2019年4月)第二部分 什么是可可粉? Cocoa和Cocoa Touch分别是OS X和iOS的应用程序开发环境。 Cocoa和Cocoa Touch都包含Objective-C运行时和两个核心框架: Cocoa (包括Foundation和AppKit框架)用于开发在OS X上运行的应用程序。 Cocoa Touch (包括Foundation和UIKit框架)用于开发可在iOS上运行的应用程序。 2. Swift 5有什么新功能? https://medium.com/ios-expert-series-or-interview-series/whats-new-in-swift-5-0-25dc37f56f29 3. Nil和NULL之间的区别? 4. AnyObject和Any之间的区别? Any可以代表任何类型的实例,包括函数类型。 随着Swift 3的发布, AnyObject和Any含义已经改变。 在Swift 3中,Objective-C中的id类型现在映射到Swift中的Any类型,该类型描述任何类型的值,无论是类,枚举,结构还是任何其他Swift类型。 此更改提高了Swift和Objective-C的兼容性。 例如,从Swift 3开始,Objective-C集合可以保存Any类型的元素。这意味着Foundation的NSArray类型可以存储String , Float和Int实例。 AnyObject是所有类隐式遵循的协议。 当您需要无类型对象的灵活性时,或者使用桥接的Objective-C方法和返回无类型结果的属性时,可以使用AnyObject 。 AnyObject可用作任何类,类类型或仅类协议的实例的具体类型。 AnyObject协议还可用于弥补Swift和Objective-C之间的鸿沟。 一些Objective-C API使用AnyObject协议来提供与Swift的兼容性。 5.什么是@synthesize和@dynamic? @synthesize将为您的属性生成getter和setter方法。 @dynamic只是告诉编译器,getter和setter方法不是由类本身实现的,而是由其他地方实现的(例如超类或将在运行时提供)。 使用propertyName提及@dynamic会告诉编译器不要创建访问器方法,因为用户将来会动态提供实现。 苹果允许其开发人员在运行时使用动态方法解析提供方法实施。 6.什么是inout参数? 传递给Swift函数的所有参数都是常量 ,因此您无法更改它们。 如果需要,可以传入一个或多个参数inout ,这意味着可以在函数内部更改它们,这些更改反映在函数外部的原始值中。 func doubleInPlace(number: inout Int) { […]

RxSwift主题

将新值添加到可观察值? 向主题问好。 开发应用程序时,通常需要在运行时将新值手动添加到可观察对象上,并将其发送给订阅者。 我们想要的是既可以观察又可以充当观察者的东西。 这称为主题 。 主体既充当可观察者又充当观察者。 他们可以接收.next事件,并且每次接收到事件时,它都会转身并将其发送给其订户。 RxSwift中有四种主题类型 PublishSubject :开始为空,仅向订阅者发出新元素。 BehaviorSubject :从初始值开始,然后将其或最新元素重放给新订户。 ReplaySubject :使用缓冲区大小初始化,并将保留最大大小的元素的缓冲区并重播给新订户。 BehaviorRelay :包装BehaviorSubject,将其当前值保留为状态,并仅向新订阅者重播最新/初始值。 发布主题 让我们创建一个PublishSubject,在上面添加一些订阅者,并在运行时添加一些值。 请记住,PublishSubject会向订阅者发出新的元素,因此,为了使订阅者获取值,订阅之后必须发生.onNext事件。 输出: 第一:下一个(1) 第一:下一个(2) 第一:下一个(3) 第二:下一个(3) 第一:下一个(4) 第二:下一个(4) 第二:下一个(5) 第三名:下一个(5) 有道理吧? 订阅者等待.onNext事件以获取值。 订阅后,订阅者将从PublishSubject接收值,直到订阅被释放。 行为主体 使用与以前相同的代码,只是主题类型有所不同。 输出: 第一:下一个(初始值) 第一:下一个(1) 第一:下一个(2) 第二个:next(2) 第一:下一个(3) 第二:下一个(3) 第一:下一个(4) secord:下一个(4) 第三名:下一个(4) secord:下一个(5) 第三名:下一个(5) 如您所见,输出的主要区别在于,发生订阅时,订阅者会立即打印该值。 记得? BehaviorSubject从初始值开始,然后将其或最新元素重放给新订阅者。 重播主题 输出: 第一:下一个(1) 第一:下一个(2) 第二个:next(1) 第二个:next(2) […]

斯威夫特镜子yapısı

Objective-C ile kod yazarkençokkullandığım地幔diye birkütüphanevardı。 披风说说模型objelerimioluştururkenuyarlamak zorundakaldığım-initWithCoder:-encodeWithCoder:gibimetodlarıbenim yerime otomatikoluşturuyordu。 Bir ekstraözelliğiis objenintümdeğerlerinigüzelbirşekildebasacakşekilde-描述metodunu otomatikdoldurmasıydı。 Böylecekodda debug yaparken herhangi bir Mantle iletanımlanmışobjenindescription’ınıdebug console’abastığımda,tümobjenindetayınıgörebiliyordum: Swift ile birlikte模型对象Mantlekullanmayıbıraktım,zira Mantle sadece NSObject olan objelerüzerindeçalışabiliyordu。 Kendi定制objelerimioluşturuyordum。 Swift’te bir objeninkarşılığınıbasmakiçin描述样式,名称和名称CustomStringConvertibleprotokolünüekleyerekyapıyordum。 Bu protokol mutlaka bir描述değerikoymayızorunlukılıyordu。 Burada ise tek tektümdeğerleriELLE basacakşekildeyazıyordum,bu daçokzamanalıyordu: “ Bunun kolay bir yoluolmalı” diyedüşünüparaştırdımamabulamadım。 Belki deyanlışşekildearadımbilemiyorum。 达哈·索纳(Switzerland)Swift标准图书馆dokümantasyonunabakarken Mirror diye bir […]

Swift 4中的iOS UIKit:“自定义”按钮

预习 资源 项目 https://github.com/calmone/iOS-UIKit-component 参考 UIButton类 https://developer.apple.com/reference/uikit/uibutton 快乐编码😄