Studying-Swift :Day01



学习地址:http://www.rm5u.com/    或    http://www.runoob.com/

  1. 如果创建的是 OS X playground 需要引入 Cocoa;  如果我们想创建 iOS playground 则需要引入 UIKit .
  2. iPhone或iTouch的宽为320像素,高为480像素,状态栏高为20像素,toobar高为44像素,tabbar高为49像素,导航栏高为44像素。
  3. typealias:类型别名对当前的类型定义了另一个名字;
  4. Swfit语言定义后缀?作为命名类型Optional(可选)的简写;
    var optionalInteger: Int?
    //或者
    var optionalInteger: Optional<Int>
  5. 强制解析:当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。
    var myString:String?
        myString = "Hello, Swift!"
        if myString != nil {
           // 强制解析
            print( myString! )
        } else {
           print("myString 值为 nil")
        }

    注意:使用!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil的值。

  6. 自动解析:你可以在声明可选变量时使用感叹号(!)替换问号(?)。
    var myString:String!
        myString = "Hello, Swift!"
        if myString != nil {
            print(myString)
        } else {
           print("myString 值为 nil")
        }
  7. 可选绑定:使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。
    if let constantName = someOptional {
            statements
       }
    // example :
       var myString : String?
       myString = "Hello, Swift!"
       if let yourString = myString {
           print("你的字符串值为 - \(yourString)")
       } else {
           print("你的字符串没有值")
       }
  8. 整型字面量可以是一个十进制,二进制,八进制或十六进制常量。 二进制前缀为 0b,八进制前缀为 0o,十六进制前缀为 0x,十进制没有前缀

    let decimalInteger = 17           // 17 - 十进制表示
    let binaryInteger = 0b10001       // 17 - 二进制表示
    let octalInteger = 0o21           // 17 - 八进制表示
    let hexadecimalInteger = 0x11     // 17 - 十六进制表示
  9. 注意:Swift中的字母采用的是Unicode编码[1]。Unicode叫做统一编码制,它包含了亚洲文字编码,如中文、日文、韩文等字符,甚至是我们在聊天工具中使用的表情符号
    如果一定要使用关键字作为标识符,可以在关键字前后添加重音符号(`)
  10. 浮点型字面量的默认推导类型为 Swift 标准库类型中的 Double,表示64位浮点数。
    十进制浮点型字面量 :1.25e2 表示 1.25 ? 10^2,也就是 125.0;同样,1.25e-2 表示 1.25 ? 10^-2,也就是 0.0125。
    十六进制浮点型字面量:0xFp2 表示 15 ? 2^2,也就是 60;同样,0xFp-2 表示 15 ? 2^-2,也就是 3.75。
    eg:   浮点型字面量允许使用下划线 _ 来增强数字的可读性,下划线会被系统忽略,因此不会影响字面量的值。同样地,也可以在数字前加 0,并不会影响字面量的值。
  11. 字符串型字面量:
    转移字符 含义
    \0 空字符
    \\ 反斜线 \
    \b 退格(BS) ,将当前位置移到前一列
    \f 换页(FF),将当前位置移到下页开头
    \n 换行符
    \r 回车符
    \t 水平制表符
    \v 垂直制表符
    \‘ 单引号
    \" 双引号
    \000 1到3位八进制数所代表的任意字符
    \xhh... 1到2位十六进制所代表的任意字符
  12. 位运算符:位运算符用来对二进制位进行操作,~,&,|,^分别为取反,按位与与,按位与或,按位与异或运算,如下表实例:
    p q p & q p | q p ^ q
    0 0 0 0 0
    0 1 0 1 1
    1 1 1 1 0
    1 0 0 1 1
    指定  A = 0011 1100      ;   B = 0000 1101
    运算符 描述 图解 实例
    & 按位与。按位与运算符对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的同一位都为1时才为1。 (A & B) 结果为 12, 二进制为 0000 1100
    | 按位或。按位或运算符|比较两个数,然后返回一个新的数,这个数的每一位设置1的条件是两个输入数的同一位都不为0(即任意一个为1,或都为1)。 (A | B) 结果为 61, 二进制为 0011 1101
    ^ 按位异或. 按位异或运算符^比较两个数,然后返回一个数,这个数的每个位设为1的条件是两个输入数的同一位不同,如果相同就设为0。 (A ^ B) 结果为 49, 二进制为 0011 0001
    ~ 按位取反运算符~对一个操作数的每一位都取反。 (~A ) 结果为 -61, 二进制为 1100 0011 in 2‘s complement form.
    << 按位左移。左移操作符(<<)将操作数的所有位向左移动指定的位数。
    下图展示了11111111 << 1(11111111 左移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。

    A << 2 结果为 240, 二进制为 1111 0000
    >> 按位右移。右移操作符(<<)将操作数的所有位向又移动指定的位数。

    下图展示了11111111 >> 1(11111111 右移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。

    A >> 2 结果为 15, 二进制为 0000 1111
  13. 赋值运算:
    运算符 描述 实例
    = 简单的赋值运算,指定右边操作数赋值给左边的操作数。 C = A + B 将 A + B 的运算结果赋值给 C
    += 相加后再赋值,将左右两边的操作数相加后再赋值给左边的操作数。 C += A 相当于 C = C + A
    -= 相减后再赋值,将左右两边的操作数相减后再赋值给左边的操作数。 C -= A 相当于 C = C - A
    *= 相乘后再赋值,将左右两边的操作数相乘后再赋值给左边的操作数。 C *= A 相当于 C = C * A
    /= 相除后再赋值,将左右两边的操作数相除后再赋值给左边的操作数。 C /= A 相当于 C = C / A
    %= 求余后再赋值,将左右两边的操作数求余后再赋值给左边的操作数。 C %= A 相当于 C = C % A
    <<= 按位左移后再赋值 C <<= 2 相当于 C = C << 2
    >>= 按位右移后再赋值 C >>= 2 相当于 C = C >> 2
    &= 按位与运算后赋值 C &= 2 相当于 C = C & 2
    ^= 按位异或运算符后再赋值 C ^= 2 相当于 C = C ^ 2
    |= 按位或运算后再赋值 C |= 2 相当于 C = C | 2
  14. 区间运算符:
    运算符 描述 实例
    闭区间运算符 闭区间运算符(a...b)定义一个包含从a到b(包括a和b)的所有值的区间,b必须大于等于a。 ‌ 闭区间运算符在迭代一个区间的所有值时是非常有用的,如在for-in循环中: 1...5 区间值为 1, 2, 3, 4 和 5
    半开区间运算符 半开区间(a..<b)定义一个从a到b但不包括b的区间。 之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。<="" td=""> 1..< 5 区间值为 1, 2, 3, 和 4
  15. 三目运算符:(a ? b : c) -- 如果a为true,值为b,否则为c.
  16. 运算符优先级:

    • 指针最优,单目运算优于双目运算。如正负号。
    • 先乘除(模),后加减。
    • 先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7 等价于 (1 << (3 + 2))&7
    • 逻辑运算最后计算
      运算符类型 运算符 结合方向
      表达式运算 () [] . expr++ expr-- 左到右
      一元运算符
      * & + - ! ~ ++expr --expr

      * / %

      + -

      >> <<

      < > <= >=

      == !=

      右到左
      位运算符
      &

      ^

      |

      &&

      ||

      左到右
      三元运算符 ?: 右到左
      赋值运算符 = += -= *= /= %= >>= <<= &= ^= |= 右到左
      逗号 , 左到右
  17. Swift 条件语句
    语句 描述

    if 语句

    if 语句 由一个布尔表达式和一个或多个执行语句组成。

    if...else 语句

    if 语句 后可以有可选的 else 语句else 语句在布尔表达式为 false 时执行。

    if...else if...else 语句

    if 后可以有可选的 else if...else 语句, else if...else 语句常用于多个条件判断。

    内嵌 if 语句

    你可以在 if 或 else if 中内嵌 if 或 else if 语句。

    switch 语句

    switch 语句允许测试一个变量等于多个值时的情况。

  18. Swift 循环
    循环类型 描述

    for-in

    遍历一个集合里面的所有元素,例如由数字表示的区间、数组中的元素、字符串中的字符。

    for 循环

    用来重复执行一系列语句直到达成特定条件达成,一般通过在每次循环完成后增加计数器的值来实现。

    while 循环

    运行一系列语句,如果条件为true,会重复运行,直到条件变为false。

    repeat...while 循环

    类似 while 语句区别在于判断循环条件之前,先执行一次循环的代码块。
    控制语句 描述

    continue 语句

    告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。

    break 语句

    中断当前循环。

    fallthrough 语句

    如果在一个case执行完后,继续执行下面的case,需要使用fallthrough(贯穿)关键字。
  19. Swift 字符串
    创建字符串:你可以通过使用字符串字面量或 String 类的实例来创建一个字符串:

    import UIKit
    
    // 使用字符串字面量
    var stringA = "Hello, World!"
    print( stringA )
    
    // String 实例化
    var stringB = String("Hello, World!")
    print( stringB )

    空字符串:你可以使用空的字符串字面量赋值给变量或初始化一个String类的实例来初始值一个空的字符串。 我们可以使用字符串属性 isEmpty 来判断字符串是否为空:

    import UIKit
    
    // 使用字符串字面量创建空字符串
    var stringA = ""
    
    if stringA.isEmpty {
       print( "stringA 是空的" )
    } else {
       print( "stringA 不是空的" )
    }
    
    // 实例化 String 类来创建空字符串
    let stringB = String()
    
    if stringB.isEmpty {
       print( "stringB 是空的" )
    } else {
       print( "stringB 不是空的" )
    }

    字符串常量:你可以将一个字符串赋值给一个变量或常量,变量是可修改的,常量是不可修改的。
    字符串中插入值:字符串插值是一种构建新字符串的方式,可以在其中包含常量、变量、字面量和表达式。 您插入的字符串字面量的每一项都在以反斜线为前缀的圆括号中:

    import UIKit
    
    var varA   = 20
    let constA = 100
    var varC:Float = 20.0
    
    var stringA = "\(varA) 乘以 \(constA) 等于 \(varC * 100)"
    print( stringA )

    字符串连接:字符串可以通过 + 号来连接。
    字符串长度:字符串长度使用 String.characters.count 属性来计算
    字符串比较:可以使用 == 来比较两个字符串是否相等
    Unicode 字符串:Unicode 是一个国际标准,用于文本的编码,Swift 的 String 类型是基于 Unicode建立的。你可以循环迭代出字符串中 UTF-8 与 UTF-16 的编码,实例如下:

    import UIKit
    
    var unicodeString   = "学习教程"
    
    print("UTF-8 编码: ")
    for code in unicodeString.utf8 {
       print("\(code) ")
    }
    
    print("\n")
    
    print("UTF-16 编码: ")
    for code in unicodeString.utf16 {
       print("\(code) ")
    }

    字符串函数以及运算符:

    序号 函数/运算符 & 描述
    1
    isEmpty

    判断字符串是否为空,返回布尔值

    2
    hasPrefix(prefix: String)

    检查字符串是否拥有特定前缀

    3
    hasSuffix(suffix: String)

    检查字符串是否拥有特定后缀。

    4
    Int(String)

    转换字符串数字为整型。 实例:

    let myString: String = "256"
    let myInt: Int? = Int(myString)
    5
    String.characters.count

    计算字符串的长度

    6
    utf8

    您可以通过遍历 String 的 utf8 属性来访问它的 UTF-8 编码

    7
    utf16

    您可以通过遍历 String 的 utf8 属性来访问它的 UTF-16 编码

    8
    unicodeScalars

    您可以通过遍历String值的unicodeScalars属性来访问它的 Unicode 标量编码.

    9
    +

    连接两个字符串,并返回一个新的字符串

    10
    +=

    连接操作符两边的字符串并将新字符串赋值给左边的操作符变量

    11
    ==

    判断两个字符串是否相等

    12
    <

    比较两个字符串,对两个字符串的字母逐一比较。

    13
    !=

    比较两个字符串是否不相等。

  20. Swift 字符(Character)
    Swift 的字符是一个单一的字符字符串字面量,数据类型为 Character:

    import UIKit
    
    let char1: Character = "A"
    let char2: Character = "B"
    
    print("char1 的值为 \(char1)")
    print("char2 的值为 \(char2)")

    注意:如果想在 Character(字符) 类型的常量中存储更多的字符,则程序执行会报错。
         Swift 中不能创建空的 Character(字符) 类型变量或常量。
    遍历字符串中的字符:Swift 的 String 类型表示特定序列的 Character(字符) 类型值的集合; 每一个字符值代表一个 Unicode 字符;您可通过for-in循环来遍历字符串中的characters属性来获取每一个字符的值:

    import UIKit
    
    for ch in "Hello".characters {
       print(ch)
    }

    字符串连接字符:使用 String 的 append() 方法来实现字符串连接字符:

    import UIKit
    
    var varA:String = "Hello "
    let varB:Character = "G"
    
    varA.append( varB )
    
    print("varC  =  \(varA)")
  21. Swift 数组
    创建数组:
          可以使用构造语法来创建一个由特定数据类型构成的空数组:
            var someArray = [someType]()

    创建一个初始化大小数组的语法:
               var someArray = [someType](count: NumberofElements, repeatedValues: InitialValue)
          创建一个类型为Int,大小为3,初始值为0的空数组:
               var someInts = [Int](count: 3, repeatedValues: 0)
          创建含有三个元素的数组:
               var someInts:[Int] = [10,20,30]

    访问数组:我们可以根据数组的索引来访问数组的元素:
          var someVar = someArray[index]

    修改数组:可以使用 append() 方法或者赋值运算符 += 在数组末尾添加元素,如下所示,我们初始化一个数组,并向其添               加元素,也可以通过索引修改数组元素的值。

    遍历数组:可以使用for-in循环来遍历所有数组中的数据项,如果我们同时需要每个数据项的值和索引值,可以使用 String                 的 enumerate() 方法来进行数组遍历:

    import UIKit
    
    var someStrs = [String]()
    
    someStrs.append("Apple")
    someStrs.append("Amazon")
    someStrs.append("Runoob")
    someStrs += ["Google"]
    
    for (index, item) in someStrs.enumerate() {
       print("在 index = \(index) 位置上的值为 \(item)")
    }

    合并数组:我们可以使用加法操作符(+)来合并两种已存在的相同类型数组。新数组的数据类型会从两个数组的数据类型中               推断出来。
    Count属性:可以使用count属性来计算数组元素个数;

    isEmpty属性:可以通过只读属性 isEmpty 来判断数组是否为空,返回布尔值;

时间: 2024-10-05 01:34:29

Studying-Swift :Day01的相关文章

iOS8 Core Image In Swift:更复杂的滤镜

iOS8 Core Image In Swift:自动改善图像以及内置滤镜的使用 上面那篇文章主要是Core Image的基础,只是为了说明CIImage.CIFilter.CIContext,以及基础滤镜的简单使用.在上一篇中几乎没有对滤镜进行更复杂的操作,都是直接把inputImage扔给CIFilter而已,而Core Image实际上还能对滤镜进行更加细粒度的控制,我们在新的工程中对其进行探索.为此,我重新建立了一个空的workspace,并把之前所使用的工程添加到这个workspace

Swift:UIKit中Demo(一)

关于Swift的基本概念及语法知识.我在前面的章节中已经介绍了非常多.这一节和下一节主要有针对性的解说Swift在实际UIKit开发中的使用场景及注意点.先来看看Demo的终于效果图. Demo分析: 1. 界面上面有三个button,他们的宽度不一致. 2. 点击每一个button的时候.以下有红色下划线跟着"走动". 一. Storyboard中的设计 注意到,这个红色下划线是任意摆放的.没有刻意的设置它的位置及宽度.而这个红色下划线也就是一个简单的UIView. 二. 拖线工作

iOS8 Core Image In Swift:人脸检测以及马赛克

iOS8 Core Image In Swift:自动改善图像以及内置滤镜的使用 iOS8 Core Image In Swift:更复杂的滤镜 Core Image不仅内置了诸多滤镜,还能检测图像中的人脸,不过Core Image只是检测,并非识别,检测人脸是指在图像中寻找符合人脸特征(只要是个人脸)的区域,识别是指在图像中寻找指定的人脸(比如某某某的脸).Core Image在找到符合人脸特征的区域后,会返回该特征的信息,比如人脸的范围.眼睛和嘴巴的位置等. 人脸检测并标记检测到的区域 先做

iOS8 Core Image In Swift:视频实时滤镜

iOS8 Core Image In Swift:自动改善图像以及内置滤镜的使用 iOS8 Core Image In Swift:更复杂的滤镜 iOS8 Core Image In Swift:人脸检测以及马赛克 在Core Image之前,我们虽然也能在视频录制或照片拍摄中对图像进行实时处理,但远没有Core Image使用起来方便,我们稍后会通过一个Demo回顾一下以前的做法,在此之前的例子都可以在模拟器和真机中测试,而这个例子因为会用到摄像头,所以 只能在真机上测试. 视频采集 我们要进

swift:UIKit中Demo(二)

这一节,继续为大家提供一个Demo,用来说明Swift中的各种语法及在UIView中的基本使用.效果图如下: 看起来,这个Demo非常的简单.但是为了进行详细的语法说明,它的实现,均是用代码实现的,并且下方的进度条都是"组装"起来的. 结构分析: 1. 有一个根控制器ViewController.swift, 它只是用来展示上面显示的文字(秋恨雪). 2. 然后下面的文字大小切换及进度条这个整体是一个自定义的View(LFFontView.swift) 3. 进度条部分又有三部分内容组

Swift:面向对象(继承与构造方法)

一. 继承 1.  Swift中定义的类,如果不继承自任何类,它就是基类.这一点和objective-c中定义的类不一样,在objective-c中定义的类默认的基类是NSObject. 2.  重写父类的方法及属性,必须使用override的关键字(这样处理的话,更清晰了,很容易看出是父类的方法还是自己类中的方法). 3.  如果在类,方法,属性 前面用final进行了修饰,就不允许被继承或者被重写. 类继承关系Demo: class Animal { var speed : Int = 1

Swift:可选类型(Optional)

在我们使用objective-c表示字符串信息的时候,可以用下面方法书写. NSString *str = @"秋恨雪"; str = nil; 因为objective-c是弱类型语言,所以这里的str既可以是具体的字符串也可以是nil.但到了Swift中就不可以了,因为Swift是类型安全的语言,一个String类型的变量不可能既能是具体的字符串,又可以为nil(更严格的说String类型的内容只能是字符串).所以,在Swift中有了可选类型的概念.(其实这一概念也是"借鉴

Swift:闭包

一.闭包的介绍 闭包表达式(Closure Expressions) 尾随闭包(Trailing Closures) 值捕获(Capturing Values) 闭包是引用类型(Closures Are Reference Types) 闭包是自包含的函数代码块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的 lambdas 函数比较相似. 闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的

swift:谈谈swift几种常见属性的区别

一.前奏 Swift作为一门新语言,经过几年的发展,逐渐趋于完善,目前已经更新到3.0版本,它汇集许多其他语言的特点,例如JS.Paython等,完全区别于OC.个人感觉它没有完全的OOP和OOD的性质. 二.谈谈几种属性的区别 存储属性 定义:实实在在存储常量和变量的 计算属性 定义:依赖于存储属性,通过计算得出来,它提供getter访问值,提供setter方法间接给其他属性或者变量设置值 类属性 定义:其本质其实就是一个全局属性,在类里限定了其作用域,用关键字static修饰 懒加载属性 定

swift:入门知识之类和对象

1.swift中使用class创建一个类.一个类的声明则是在类里作为常量或变量声明的,除了是在类的上下文中.在方法和函数中也是这么写的. 2.swift中使用init(...)作为初始化构造函数 3.swift中使用构造函数初始化成员变量时,格式为 : self.name = name.构造器的声明跟函数一样,除了会创建类的实例.每一个属性都需要赋值,无论在声明里还是在构造器里. 4.swift中使用deinit来创建一个析构函数,由系统自动调用来撤销对象,进行内存的清理工作 5.swift中子