Swift入门

基本数据类型

  • Int、UInt:整数型、非负整数
  • Float、Double:单精度浮点数、双精度浮点数
  • Bool:布偶值
  • String、Character:字符串、字符

    其他类型

    • Array, Dictionary:数组、字典
    • Struct:结构体
    • Class:类
    • var:变量
    • let:常量,必须在声明的时候赋值

      类型别名

      • typealias:类型别名
        typealias newname = type
        	/// 定义Feet类型为Int类型
        	typealias Feet = Int
        

        类型标注

        // 方法一
        	var varB:Float
        	varB = 3.14159
        	print(varB)
        	// 方法二
        	let constB:Float = 3.14159
        	print(constB)
        

        可选类型

        • 在 Swift 中,普通的变量或常量不能赋值为 nil(空值),但是可选类型的变量或常量可以,用于表示一个值可能为nil(空值)的情况,用问号❓表示
          // 两种写法等价
          	var optionalInteger: Int?
          	var optionalInteger: Optional
          • 强制解析:当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号!来获取值。
            // myString是String类型,且是可选类型,可能为空
            	var myString:String?
            	// myString为Hello, Swift
            	myString = "Hello, Swift!"
            	// 强制解析myString,我知道它是存在值的
            	// 如果myString为nil会报错
            	print(myString!)
            
            • 自动解析:你可以在声明可选变量时使用感叹号!替换问号?。这样可选变量在使用时就不需要再加一个感叹号!来获取值,它会自动解析。
              // 自动解析
              	var myString:String!
              	myString = "Hello, Swift!"
              	print(myString)
              

              print输出

              • \()的使用
                let name = "菜鸟教程"
                	let site = "http://www.runoob.com"
                	print("\(name)的官网地址为:\(site)")
                
                • 转义字符
                  转义字符含义
                  \0空字符
                  \\反斜线 \
                  \n换行符
                  \r回车符
                  \’单引号
                  \"双引号

                  其他进制表示

                  • 二进制前缀为 0b,八进制前缀为 0o,十六进制前缀为 0x,十进制没有前缀
                    let decimalInteger = 17           // 17 - 十进制表示
                    	let binaryInteger = 0b10001       // 17 - 二进制表示
                    	let octalInteger = 0o21           // 17 - 八进制表示
                    	let hexadecimalInteger = 0x11     // 17 - 十六进制表示
                    

                    区间运算符

                    • 1...5 区间值为 1, 2, 3, 4 和 5
                    • 1..< 5 区间值为 1, 2, 3, 和 4
                      for index in 1...5 {print("闭区间运算符:")
                      	}
                      	for index in 1..<5 {print("半开区间运算符:")
                      	}
                      

                      合并空值运算符:??

                      • 合并空值运算符 a ?? b 如果可选项 a 有值则展开,如果没有值,是 nil,则返回默认值 b
                      • 表达式 a 必须是一个可选类型,表达式 b 必须与 a 的存储类型相同
                      • 合并空值运算符,实际上是三元运算符作用到 Optional 上的缩写 a != nil ? a! : b
                      • 如果 a 的值是非空,b的值将不会被考虑,也就是合并空值运算符是短路的

                        函数

                        • runoob:函数名, name、site:参数,String:返回值
                          func runoob(name: String, site: String) -> String { return name + site
                          }
                          // 调用
                          print(runoob(name: "菜鸟教程:", site: "www.runoob.com"))
                          
                          • 不带参数函数
                            func funcname() -> datatype { return datatype
                            }
                            
                            • 没有返回值
                              func runoob(site: String) { print("官网:\(site)")
                              }
                              runoob(site: "http://www.baidu.com")
                              
                              • 可变参数
                                func vari(members: N...) { for i in members { print(i)
                                    }
                                }
                                vari(members: 4,3,5)
                                vari(members: 4.5, 3.1, 5.6)
                                vari(members: "Google", "Baidu", "Runoob")
                                
                                • 元组tuple类型让多个值作为一个复合值从函数中返回
                                  func minMax(array: [Int]) -> (min: Int, max: Int) { var currentMin = array[0]
                                      var currentMax = array[0]
                                      for value in array[1.. if value < currentMin { currentMin = value
                                          } else if value > currentMax { currentMax = value
                                          }
                                      }
                                      return (currentMin, currentMax)
                                  }
                                  let bounds = minMax(array: [8, -6, 2, 109, 3, 71])
                                  print("最小值为 \(bounds.min) ,最大值为 \(bounds.max)")
                                  

                                  枚举

                                  // 定义枚举
                                  enum DayWeek { case SUNDAY
                                      case MONDAT
                                      case TUESDAY
                                      case WEDNESDAY
                                      case THURSDAY
                                      case FRIDAY
                                      case SATURDAY
                                  }
                                  // 快捷方式
                                  enum DayWeek { case SUNDAY, MONDAT, TUESDAY
                                  }
                                  // 使用枚举
                                  var weekDay = DayWeek.TUESDAY
                                  // 修改方法
                                  weekDay = DayWeek.SATURDAY
                                  // 简写方法
                                  weekDay = .SATURDAY
                                  
                                  • 原始值

                                    枚举可以是字符串,字符,或者任何整型值或浮点型值。每个原始值在它的枚举声明中必须是唯一的

                                    在原始值为整数的枚举时,不需要显式的为每一个成员赋值,Swift会自动为你赋值,隐式赋值的值依次递增1,如果第一个值没有被赋初值,将会被自动置为0。

                                    enum Month: Int { case January = 1
                                        case February
                                        case March
                                    }
                                    // 快捷方式
                                    enum Month: Int { case January = 1, February, March
                                    }
                                    let month = Month.March.rawValue
                                    print("数字月份为: \(month)。")
                                    
                                    • 相关值

                                      可以存放不同类型的枚举值

                                      enum Student{ case Name(String)
                                          case Mark(Int,Int,Int)
                                      }
                                      var studDetails = Student.Name("Runoob")
                                      var studMarks = Student.Mark(98,97,95)
                                      switch studMarks {case Student.Name(let studName):
                                          print("学生的名字是: \(studName)。")
                                      case Student.Mark(let Mark1, let Mark2, let Mark3):
                                          print("学生的成绩是: \(Mark1),\(Mark2),\(Mark3)。")
                                      }