Swift学习笔记(五)—— 学习心得

来源:互联网 发布:冒险岛双刀v矩阵 编辑:程序博客网 时间:2024/05/17 21:52

实践得出

1、 初始化方法中参数会自动带入外部名、不用写在参数名称前添加#

2、 初始化方法的重载不需要加override 和 func

3、 在swift,没有this  这点需要注意

4、 Isas的区别  is 判断是否属于某类型   as把类型转换为某类型

5、 属性的Set方法中  newValue 表示赋值进来的值


1、 枚举  

a) 使用 toRaw 和 fromRaw 函数来在原始值和枚举值之间进行转换。

b) Switch 中必须要写default

 

 

 

 

接口和扩展

1、 使用 protocol 来声明一个接口。

类、枚举和结构体都可以实现接口。


2、 使用 extension 来为现有的类型添加功能,比如添加一个计算属性的方法。你可以使用扩展来给任意类型添加协议,甚至是你从外部库或者框架中导入的类型。

 

泛型

1、 在尖括号里写一个名字来创建一个泛型函数或者类型。

2、 在类型名后面使用 where 来指定一个需求列表

func anyCommonElements <T, U where T: Sequence, U: Sequence, T.Generat

orType.Element: Equatable, T.GeneratorType.Element == U.GeneratorType.

Element> (lhs: T, rhs: U) -> Bool {  

      for lhsItem in lhs {  

          for rhsItem in rhs {  

              if lhsItem == rhsItem {  

                  return true  

              }  

          }  

      }  

      return false  

 }  

 anyCommonElements([1, 2, 3], [3])

 

 

类型别名

类型别名(type aliases)就是给现有类型定义另一个名字。你可以使用 typealias 关键字来定

义类型别名。

 

何时使用断言 

当条件可能为假时使用断言,但是最终一定要保证条件为真,这样你的代码才能继续运

行。

 

 

字符串是值类型 

 

Swift  的  String  类型是值类型。如果您创建了一个新的字符串值,那么当其进行常量、变量赋值操作或在函数/方法中传递时,会进行值拷贝。在不同情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值。

注意:和 Cocoa  中的  NSString  不同,当您在  Cocoa  中创建了一个  NSString  实例,

并将其传递给一个函数/方法,或者赋给一个变量,您永远都是传递或赋值同一个

NSString  实例的一个引用。除非您特别要求其进行值拷贝,否则字符串不会进行赋值

新副本操作。

 

 

计算字符数量

通过调用全局  countElements  函数,并将字符串作为参数进行传递可以获取该字符串的字符数量。

 

 

可变形参

可通过在形参的类型名后边插入三个点符号(...)来编写可变形参。

注意:函数最多可以有一个可变形参,而且它必须出现在参数列表的最后,以避免使

用多个形参调用函数引发歧义。如果你的函数有一个或多个带有默认值的形参,并且

还有可变形参,请将可变形参放在所有默认形参之后,也就是的列表的最末尾。

 

使用函数类型

在 swift 中您可以像任何其他类型一样的使用函数类型。

  func addTwoInts(a: Int, b: Int) -> Int {  

      return a + b  

  }  

var mathFunction: (Int, Int) -> Int = addTwoInts  

 

作为形参类型的函数类型

作为返回类型的函数类型

嵌套函数

嵌套函数默认对外界是隐藏的,但仍然可以通过它们包裹的函数调用和使用它。enclosing 

function 也可以返回一个嵌套函数,以便在其他作用域中使用嵌套函数。

 

闭包

闭 包 是 功 能 性 自 包含 模块 , 可以 在代 码中 被传 递和 使用 。

 

在  函数  章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三 种形式之

一: 

1.  全局函数是一个有名字但不会捕获任何值的闭包 

2.  嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 

3.  闭包表达式是一个利用轻量级语法所写的可以捕获其上下文中变量或常量值的没有名字的闭包 


函数的参数补充

1、 swift中使用let声明的对象不能被赋值,基本数据结果也会变的不可变,当结果更复杂一点时:

a) 用let声明数组时,数组的长度虽然不可变,却可以改变数组元素的值,

b) 使用let声明的Dictionary是完全不可变的,

c) 使用let声明的类对象是可变的

d) 使用var和let声明的,intString都是不可变的,但是var声明时可以对变量重新赋值

2、 swift的外部参数名

a) 在类外面写的方法是需要加或者 自定义外部参数名的,默认没有外部参数名

b) 在类里面的方法是,从第二个形参开始就有默认的外部参数名,默认的外部参数名和内部参数名一致;当然,你也可以自定义外部参数名

c) 类方法的初始化方法是,从第一个参数开始就有默认的外部参数名,默认的外部参数名和内部参数名一致;当然,你也可以自定义外部参数名

1、 swift的方法可变参数的定义

a) 方法的默认形参为常量形参,在方法内不可以直接改变形参的值

b) 在方法的形参前加var ,可定义形参为可变形参,在方法内可以直接改变形参的值

c) 在方法的形参前加inout关键字后,不能再用varlet修饰,其默认是var类型的可变形参



0 0