首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【读书笔记】The Swift Programming Language (Swift 4.0.3)

Enumerations * 递归定义的枚举,就是一个演示函数式编程的绝佳示例. * swift 中的枚举,变成了一中,可以有效承载数据和算法的描述性数据结构. * swift 中的 enumeration...Nested Types * 支持类型嵌套定义,这已经是很大的突破了. * 即使在函数内部,也可以定义新的类型. * 可以用.语法,访问嵌套定义的类型....Memory Safety * inout 标记的函数参数,是最容易引起访问冲突问题的. * 往同一函数,同时以不同的 inout 参数,传递同一个实际变量,会引起访问冲突 --> 这一行为,可以被自动识别并标记出来...* 类型方法调用,不允许使用自身作为 inout 参数传递给自己的某个方法....Access Control * 默认访问级别是 internal,可以在定义它的模块内的各个源文件之间自由使用. * fileprivate 和 private 并存,是因为swift中允许类型嵌套定义

1.5K100

Encoding and Decoding Custom Types

当存在此枚举时,其case充当属性权威列表,在编码或解码可编码类型的实例时该属性必须包含在内。枚举case的名称应与您为类型中的相应属性指定的名称相匹配。...如果在解码实例时它们不存在,或者如果某些属性不应包含在编码表中,则忽略CodingKeys枚举中的属性。...如果序列化数据格式中使用的键与数据类型中的属性名称不匹配,请通过将String指定为CodingKeys枚举的原始值类型来提供备用键。用作每个枚举情况的原始值的字符串是在编码和解码期间使用的键名。...在下面的示例中,扩展了Coordinate结构以支持嵌套在additionalInfo容器内的提升属性: struct Coordinate { var latitude: Double var longitude...additionalInfo } enum AdditionalInfoKeys: String, CodingKey { case elevation } } 因为Coordinate类型的编码形式包含第二级嵌套信息

1.9K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Swift学习总结

    5、Swift函数支持嵌套,用元组语法来支持返回多个值,支持变长参数,支持参数带默认值。函数还允许有外部名与内部名。...元组也可以作为函数参数 6、闭包就是objc中的Block 闭包语法: {(参数)->返回类型 in //代码 } 闭包可以利用swift的类型推断系统去除参数和返回值的类型信息来简化闭包。...结构体提供了一种默认的初始化方法,会将所有属性都作为参数。与结构体不同,类没有默认的成员初始化方法。 在方法实现中,属性如果遇到同名参数才需要指定self,不然则不需要。...感叹号表示返回隐式展开可空类型实例,其使用起来方便(不需要写可空类型展开的语法),但不如跟随问号安全。 19、在被赋给另一个实例或是作为参数传递给函数时,值类型总是被复制。...因此我们在赋值或将实例作为参数传递时,在它们没被修改或写入存储时,它们还是对同一份存储进行引用。这样值类型就可以避免创建多余的数据副本。

    3K20

    万字长文|Swift语法全面解析|附示例

    闭包表达式,尾随闭包,值捕获,闭包是引用类型,逃逸闭包(@escaping),自动闭包 如果你需要将一个很长的闭包表达式作为最后一个参数传递给函数,将这个闭包替换成为尾随闭包的形式很有用。...错误处理 错误处理(Error handling) 是响应错误以及从错误中恢复的过程。Swift 在运行时提供了抛出、捕获、传递和操作可恢复错误(recoverable errors)的一等支持。...Swift 允许定义嵌套类型,可以在支持的类型中定义嵌套的枚举、类和结构体。...扩展的语法,计算型属性,构造器,方法,下标,嵌套类型 Swift 中的扩展可以: 添加计算型实例属性和计算型类属性 定义实例方法和类方法 提供新的构造器 定义下标 定义和使用新的嵌套类型 使已经存在的类型遵循...在值类型(即结构体和枚举)的实例方法中,将 mutating 关键字作为方法的前缀,写在 func 关键字之前,表示可以在该方法中修改它所属的实例以及实例的任意属性的值。

    3.7K22

    Swift基础 嵌套

    翻译自:https://docs.swift.org/swift-book/LanguageGuide/Closures.html#ID102 嵌套是自包含的功能块,可以在代码中传递和使用。...Swift为您处理捕获的所有内存管理。 注意 如果您不熟悉捕获的概念,请不要担心。下文在《捕捉价值观》中对此进行了详细解释。 函数中引入的全局和嵌套函数实际上是闭包的特殊情况。...这些优化包括: 从上下文推断参数和返回值类型 来自单表达式闭包的隐式回报 速记参数名称 尾随闭包语法 嵌套表达式 Nested Functions中引入的嵌套函数是命名和定义自包含代码块作为更大函数的一部分的便捷手段...一对括号仍然包裹着方法的整个参数。然而,这个论点现在是一个内联闭包。 从上下文推断类型 因为排序闭包是作为参数传递给方法的,所以Swift可以推断出其参数的类型以及返回值的类型。’...然而,当self是结构或枚举的实例时,转义闭包无法捕获对self的可变引用。结构和枚举不允许共享可变性,正如结构和枚举是值类型中讨论的那样。

    13500

    Swift解读专题一——Swift2.2语言预览

    语言与Objective-C、Java语言的函数特点:         Objective-C实际上并没有函数重载的概念,不同参数的函数实际上拥有不同的函数名,Objective-C的风格将参数名嵌套进函数名中...中的函数也支持嵌套操作,嵌套内部的函数可以使用外部的变量,示例如下: func returnFifteen() -> Int {     var y = 10     //嵌套函数     func add... print(132) } f(count:0) 通过这种写法,开发者在将函数作为参数传递时,无需再创建中间函数,示例如下: //参数中有函数 func func1(param1:Int,param2:...        Swift中的枚举和C与Objective-C有很大的差别,在Swift中,枚举也被作为一种数据类型来处理,其中可以添加函数方法。...des()         Swift中的枚举也可以添加附加值,在switch语句中取到对应的枚举类型后,可以获取开发者设置的附加值进行逻辑处理,示例如下: enum MyEnum { //为这个类型天啊及一组附加值

    2.1K20

    Swift基础 扩展

    这包括扩展您无法访问原始源代码(称为追溯建模)的类型的能力。扩展类似于Objective-C中的类别。(与Objective-C类别不同,Swift扩展没有名称。)...Swift中的扩展可以: 添加计算实例属性和计算类型属性 定义实例方法和类型方法 提供新的初始化器 定义下标 定义和使用新的嵌套类型 使现有类型符合协议 在 Swift 中,您甚至可以扩展协议,以提供其要求的实现...虽然它们是作为计算属性实现的,但这些属性的名称可以附加到带有点语法的浮点字面值中,作为使用该字面值执行距离转换的一种方式。 在本例中,1.0的Double值被视为表示“一米”。...初始化器 扩展可以为现有类型添加新的初始化器。这使您能够扩展其他类型,以接受自己的自定义类型作为初始化参数,或提供未作为类型原始实现的一部分的其他初始化选项。...如果您使用扩展程序将初始化器添加到另一个模块中声明的结构中,则新初始化器在从定义模块调用初始化器之前无法访问self。 下面的示例定义了一个自定义Rect结构来表示几何矩形。

    11700

    Swift基础 访问控制

    Xcode 中的每个构建目标(如 app 套装或框架)在 Swift 中被视为一个单独的模块。...例如,您不能使用私有类型作为具有内部访问级别的枚举的原始值类型。 嵌套类型 嵌套类型的访问级别与其包含类型相同,除非包含类型是公共的。在公共类型中定义的嵌套类型具有内部的自动访问级别。...唯一的例外是必需的初始化器(如必需初始化器中定义)。所需的初始化器必须具有与它所属类相同的访问级别。 与函数和方法参数一样,初始化器参数的类型不能比初始化器自己的访问级别更私密。...默认初始化器 如默认初始化器所述,Swift会自动提供默认初始化器,没有任何结构或基类的参数,这些结构或基类为其所有属性提供默认值,并且本身也不提供至少一个初始化器。...扩展中的私人成员 与它们扩展的类、结构或枚举位于同一文件中的扩展名的行为就像扩展中的代码是作为原始类型声明的一部分编写的。

    15900

    Swift基础语法(二)

    这就是Swift中的枚举类型推断。 枚举的原始值 在C/OC中,枚举的本质就是整数。所以C/OC的枚举是有原始值的,并且默认是从0开始。...Swift中的枚举是没有原始值的,但是可以在定义的时候告诉系统让枚举有原始值。...Swift中的枚举、结构体等都是值类型,它在代码传递中总是会被拷贝。...字典Dictionary、数组Array类型,是作为结构体来实现的,这意味着,当String、Dictionary、Array类型的实例被赋值到一个新的常量或者变量,或被传递到一个函数中的时候,其实传递的是拷贝后的值...OC中的NSString、NSArray和NSDictionary,他们是作为类来实现的,所以NSString、NSArray和NSDictionary的实例对象总是作为一个引用,而不是拷贝来实现赋值和传递

    2.2K20

    Swift开发规范-修订版

    extension 内的变量或方法上;说明:目的是当修改extension中某个方法的访问限制时,不需去考虑外部的extension访问限制,降低影响面。...【推荐】尽可能利用访问限制修饰符控制类、方法等的访问限制,遵循开闭原则;说明:如确定某方法或变量不应该被外部调用,就使用private进行修饰,编译程序阻止外部不合适的调用。...包含所有情况,可不加default,如遍历枚举类型时 default: break } } } 四、简略规约 【强制】Swift 会被结构体按照自身的成员自动生成一个非...【推荐】在代码中灵活的使用一些地标注释,如MARK、FIXME、TODO,当同一文件中存在多种类型定义或者多种逻辑时,可以使用Mark进行分组注释,方便通过Xcode顶部面包屑进行切换; 代码示例: /...赋默认值再嵌套其他运算; 【推荐】将长计算式代码拆分,最后组合计算; 【推荐】尽量不使用 Storyboard 或者 Xib,会增加编译时间; 【推荐】减少三目运算符的使用; 七、其他 【强制】函数参数数量最多不得超过

    1.7K50

    IOS-swift5.1快速入门之旅

    添加一个参数,以包括今天在问候语中的特殊午餐。 默认情况下,函数使用其参数名称作为其参数的标签。在参数名称前写入自定义参数标签,或者写入_不使用参数标签。...嵌套函数可以访问外部函数中声明的变量。您可以使用嵌套函数来组织长或复杂函数中的代码。...闭包中的代码可以访问创建闭包的作用域中可用的变量和函数,即使闭包在执行时处于不同的作用域 - 您已经看到了嵌套函数的示例。您可以使用大括号({})来编写没有名称的闭包。...作为函数的最后一个参数传递的闭包可以在括号后面立即出现。当闭包是函数的唯一参数时,可以完全省略括号。...您还可以使用字符串或浮点数作为枚举的原始类型。使用该rawValue属性可以访问枚举案例的原始值。 使用init?(rawValue:)初始化程序从原始值创建枚举的实例。

    2.1K20

    Swift基础 枚举

    Swift基础 - 枚举 翻译自:https://docs.swift.org/swift-book/LanguageGuide/Enumerations.html 枚举为一组相关值定义了通用类型,并使您能够在代码中以类型安全的方式处理这些值...如果您熟悉C,您将知道C枚举为一组整数值分配相关名称。Swift 中的枚举要灵活得多,不必为每个枚举案例提供值。...与Swift中的其他类型一样,他们的名字(如CompassPoint和Planet)以大写字母开头。...原始值 关联值中的条形码示例显示了枚举案例如何声明它们存储不同类型的关联值。作为关联值的替代品,枚举情况可以预先填充默认值(称为原始值),这些值都是同一类型。...(作为称为rawValue的参数),并返回枚举大小写或nil。

    10200

    Swift开发规范

    风格; 方法名、参数名、成员变量、局部变量、枚举成员统一使用 lowerCamelCase 风格 全局常量命名使用 k 前缀 + UpperCamelCase 命名; 扩展文件,用“原始类型名+扩展名...”作为扩展文件名,其中原始类型名及扩展名也使用 UpperCamelCase 风格,如UIView+Frame.swift; 工程中文件夹或者 Group 统一使用 UpperCamelCase 风格,...,需要声明赋值类型 省略默认的访问权限(internal) 过滤, 转换等, 优先使用 filter, map 等高阶函数简化代码,并尽量使用最简写 使用闭包时,尽量使用最简写 使用枚举属性时尽量使用自动推断...形式处理异常,避免使用隐式解包 避免判断语句嵌套层次太深,使用 guard 提前返回 如果 for 循环在函数体中只有一个 if 判断,使用 for where 进行替换 实现每个协议时, 尽量在单独的...is 作为方法名作为前缀 类似注解的修饰词单独占一行,如@objc,@discardableResult 等 extension 上不用加任何修饰符,修饰符加在 extension 内的变量或方法上

    1.5K10

    Apple Swift编程语言入门教程

    Note 练习 使用 () 来包含一个浮点数计算到字符串,并包含某人的名字来问候。 创建一个数组和字典使用方括号 "[]" ,访问其元素则是通过方括号中的索引或键。...函数可以嵌套。内嵌函数可以访问其定义所在函数的变量。你可以使用内嵌函数来组织代码,避免过长和过于复杂。...numbers.map({number in 3 * number}) 你可以通过数字而不是名字来引用一个参数,这对于很短的闭包很有用。一个闭包传递其最后一个参数到函数作为返回值。...在如上例子中,原始值的类型是 Int 所以可以只指定第一个原始值。其后的原始值都是按照顺序赋值的。也可以使用字符串或浮点数作为枚举的原始值。...一大重要的区别是代码之间的传递总是用拷贝(值传递),而类则是传递引用。

    2.1K30

    Swift 周报 第三十三期

    、尼日利亚、坦桑尼亚或土耳其作为 App 或 App 内购买项目 (不包括自动续期订阅) 的基准店面,则对应店面中的价格不会发生变化。...App Store Connect 中“我的 App”的“价格与销售范围”部分现已更新,以显示这些即将进行的价格调整。一如既往,你可以随时更改你的 App、App 内购买项目和自动续期订阅的价格。...虽然 Swift 5.9 添加了对不可复制结构和枚举的支持,但这些类型仍然不允许用作泛型类型参数。...Animation 定义了动画执行的参数,并为不同的 Animato r制定了不同的协议。此外,文章还介绍了类型擦除的概念,以解决参数类型不一致的问题。...通过示例,展示了如何创建短数字格式样式和粗体数字格式样式,并说明了如何在自定义类型中重用这些格式样式。最后,作者还提供了一种封装格式化逻辑的方法。

    34220

    iOS面试题-Swift篇

    当闭包作为一个实际参数传递给一个函数或者变量的时候,我们就说这个闭包逃逸了,可以在形式参数前写 @escaping 来明确闭包是允许逃逸的。...可以用于值类型,结构体,枚举;swift 和OC 中的自省 有什么区别?...函数重载是指: 函数名称相同,函数的参数个数不同, 或者参数类型不同,或参数标签不同, 返回值类型与函数重载无关 swift 支持函数重载swift 中的枚举,关联值 和 原始值的区分?...关联值--有时会将枚举的成员值跟其他类型的变量关联存储在一起,会非常有用 原始值--枚举成员可以使用相同类型的默认值预先关联,这个默认值叫做:原始值 将一个很长的闭包表达式作为函数的最后一个实参 使用尾随闭包可以增强函数的可读性...自动闭包是一种自动创建的用来把作为实际参数传递给函数的表达式打包的闭包。它不接受任何实际参数,并且当它被调用时,它会返回内部打包的表达式的值。

    3.6K40

    Swift 周报 第三十期

    以上调整生效后,App Store Connect 中“我的 App”的“价格与销售范围”部分会随即更新。一如既往,你可以随时更改你的 App 和 App 内购买项目的价格 (包括自动续期订阅)。...动机 将标称类型嵌套在其他标称类型中允许开发人员表达内部类型的自然范围——例如,String.UTF8View 是嵌套在 struct String 中的 struct UTF8View,它的名称清楚地传达了它作为...[11] 讨论如何在 swift-foundation 中正确地进行性能测试?...swift-foundation 中的 JSONDecoder 看起来太慢了,我认为这是因为 swift-foundation 还没有作为一个库被引入。...为了解决这个问题,本文提到了使用 KeyPath 作为参数的 subscript 方法来实现编译时安全检查。

    24520

    Swift 周报 第三十五期

    跟踪可以由在单个服务中记录的跨度组成,也可以跨多个服务传播。Swift 分布式跟踪使用基于任务本地的 Swift Service Context[9] 来实现透明的传播,无需手动传递上下文。...提议导入语句的访问级别[17] 这是一个关于在 Swift 中更好地控制依赖和导入的提案。...另外,更新后的包访问级别允许将依赖标记为仅对同一包中的模块可见。这会像源文件中的常规访问级别一样进行强制执行。...将作为内部导入的声明只能从内部声明或更低的访问级别中引用,而在公共或包声明中使用则会报错。...使用 Actor 作为阻塞文件访问 API 的通道点的优缺点是什么? 回答 仅仅是在文件系统中进行典型的CRUD操作 在这里,Actor并不能帮助你。

    23430

    Swift基础语法简化版(续)

    这就是Swift中的枚举类型推断。 枚举的原始值 在C/OC中,枚举的本质就是整数。所以C/OC的枚举是有原始值的,并且默认是从0开始。...Swift中的枚举、结构体等都是值类型,它在代码传递中总是会被拷贝。...、数组Array类型,是作为结构体来实现的,这意味着,当String、Dictionary、Array类型的实例被赋值到一个新的常量或者变量,或被传递到一个函数中的时候,其实传递的是拷贝后的值。...OC中的NSString、NSArray和NSDictionary,他们是作为类来实现的,所以NSString、NSArray和NSDictionary的实例对象总是作为一个引用,而不是拷贝来实现赋值和传递...可以使用它来指定参数类型或者返回值的类型。在真正调用的时候会被实际的类型替代,如传递的是Int,就替换为Int;如果传递的是Double,就替换为Double等等。

    1.6K20
    领券