每个具有“设置”捆绑软件的应用程序都至少有一个首选项页面,称为“ 首页” 。 如果您的应用程序只有几个首选项,则主页可能是您唯一需要的一个。 但是,如果首选项的数量太大而无法容纳在主页上,则可以创建链接该主页或其他子页面的子页面。 可以创建的子页面数量没有具体限制,但是您应努力使首选项保持尽可能简单和易于浏览。 设置捆绑包的名称为Settings.bundle ,位于应用程序捆绑包的顶级目录中。 该捆绑软件包含一个或多个描述首选项各个页面的“设置”页面文件。 它还可能包括显示您的首选项所需的其他支持文件,例如图像或本地化字符串。 您可以本地化Info.plist文件并以所需的语言显示设置。请在官方文档中阅读更多内容。 添加设置包 要将设置包添加到您的Xcode项目中: 选择“文件>新建>新建文件”。 在iOS下,选择“资源”,然后选择“设置捆绑包”模板。 将文件命名为Settings.bundle 。
在第一篇文章中,我将介绍计算属性以及如何使用Getters和Setters,以尝试将我在使用Swiftlang功能时学到的东西写在纸上。 计算属性 在跳入之前,需要了解一些重要的事情: 将它们视为一段代码,每次调用它们时都会计算出一个值 计算属性始终是变量(从不常量) 这些类型的属性可以在类,结构,枚举的内部或外部使用 当使用计算属性时要当心,因为它们的值可能在每次调用它们时都会改变。 而且,如果使用了setter,它们可以在其封闭范围内更改任何其他值(更多信息在下面)! 定义计算属性 首先,您必须编写一个变量并显式声明属性的类型,以帮助编译器知道将为其分配哪种类型的值。 不要分配默认值。 而是在类型声明之后打开方括号,然后开始使用吸气剂。 由于变量的值是通过使用setter和getter进行设置和检索的,因此您至少需要在方括号内使用getter,如下所示: 上面的代码中发生了什么: 您可以看到Int类型的计算属性,并且在其括号内,我使用吸气剂返回x + y的结果 一旦计算出的属性被调用,getter就被执行并且变量被赋值给结果 清理注意事项 :只要不实现setter,就不需要编写get {}。 这将加快您的写作速度 让我们谈谈获取器和设置器: 使用get {} get关键字使计算出的属性可读 使用getter可以从计算属性读取数据 在方括号内,编写代码,一旦计算属性被调用,该代码将被执行 访问该属性将执行getter 尝试为计算变量分配一个值。 发生了什么? 您不能将值分配给没有设置器的计算属性。 使用set {} 要了解的几件事: 关键字s et使计算出的属性可写。 没有它,您将收到以下错误: 无法分配值[您的计算属性的名称],它是仅获取属性。 当您为计算的属性分配值时,您正在调用设置器 该值可在设置器的括号内访问 您可以在set关键字后的括号内分配一个本地名称。 该局部变量将传递的值传递给计算属性(如在下例中使用newSalaryPerWeek所示) 如果您未在setter定义中提供分配值的名称,则编译器将自动分配newValue的名称。 通过设置,您可以更改同一作用域中其他属性的值,这是您必须知道链接到计算属性的所有依赖项的原因。 有点令人困惑,但这是计算属性能力的一个很好的例子,如下所示: 为什么不使用setter更改其自己的计算属性的值? 因为我会陷入一个无限循环中,一次又一次地将值分配给它自己。 在家尝试this 让我们将此知识应用于其他几个计算属性,但是这次在Enums / Structs / Classes内部,只是看到没有任何变化: 枚举中的计算属性 […]
如果您正在寻找将用户重定向到设置应用程序以启用位置服务,通知,siri或适用于您应用程序的任何设置,那么您来对地方了。 让我们看看如何用很少的代码行来实现这一点。 只需将以下代码复制粘贴到Swift 4.2的任何按钮操作方法中即可。 它所做的全部都是向UIApplication.openSettingsURLString打开的,UIApplication.openSettingsURLString是一个NSString,其中包含原始应用程序的捆绑包ID,在这种情况下为您的应用程序。 编码愉快!
可以很简单。 建立C库依赖关系的一种简单方法是在Xcode中建立一个快速项目时使用公共标头。 第一步:创建一个快速项目 Xcode->新建->项目->可可触摸框架->语言:Swift->下一步。 我将项目命名为CDependencyTutorial 。 第二步:设置项目依赖项 我有一个名为ExampleCLibrary的静态C框架。 将ExampleCLibrary.xcodeproj拖到CDependencyTutorial项目中。 第三步:调整一些项目设置 选择目标CDependencyTutorial- > general- >链接的框架和库-> Add libExampleCLibrary.a 。 转到构建阶段->标头->将ExampleCLibrary.h拖到Public中。 转到CDependencyTutorial.h ,添加 要下载该项目吗? 点击这里。 如果您想知道我是如何解决此问题的,请查看第2部分。您是Twitter用户,想与我讨论吗? 我的推特:@humlelu。
Xcode运行测试时,它将独立调用每个测试方法。 因此,每种方法都必须准备并清理所有分配。 为此,它具有两个重要的方法setUp()和tearDown() 。 setUp() —在调用给定类中的每个测试方法之前,将调用此方法。 tearDown() —调用给定类中的每个测试方法后,将调用此方法。 每个类测试都从类 setUp() 方法执行开始。 然后针对每种测试方法 1.分配了一个新的类实例。 2.执行其实例setUp()方法。 3.运行测试。 4.执行实例tearDown()方法。 对于该类中的所有测试方法,都将重复此顺序。 在最后一个测试方法之后,当实例tearDown()已运行时,Xcode将执行类teardown方法。 您可以通过5种不同的方式自定义setUp()和teardown() , 1.覆盖setUp()类方法以设置所有测试方法的初始状态。 2.覆盖setUp()实例方法以在执行每个测试方法之前重置初始状态。 3.在执行测试方法期间,可以使用addTearDownBlock(_:)方法使用addTearDownBlock(_:)的拆卸代码块。 4.覆盖每个测试方法执行后要清除的tearDown()实例方法。 5.在执行所有测试方法后,重写tearDown()类方法以进行清理。 让我们检查以下测试的执行情况, //资源: developer.apple.comclass SetUpAndTearDownExampleTestCase:XCTestCase { 覆盖类func setUp(){// 1。 super.setUp() //这是setUp()类方法。 //在第一个测试方法开始之前被调用。 //在此处设置所有总体初始状态。 } 覆盖func setUp(){// 2。 super.setUp() //这是setUp()实例方法。 //在每个测试方法开始之前调用它。 //在此处设置任何每次测试状态。 } func testMethod1(){// 3。 //这是第一个测试方法。 //您的测试代码在这里。 addTeardownBlock {// 4。 //当testMethod1()结束时调用。 […]