介绍
- 基于Cocoa 和Cocoa Touch框架
- 采用Objective-C的命名参数以及动态对象模型。
- 支持代码预览
- 可以用于开发一套完整的操作系统。
基础语法
- 导入包 直接 import 不需要加 #
- var 关键字,表示定义变量的关键字(类型自动追踪) ;
- let 关键字,常量
- 单行注释 // 多行注释 /* */
- print(“直接输出 ,不需要”);
- Swift 是强语法,定义变量必须指定一个值,不指定就报错,不允许风险问题存在
- class是保留字,但不是一个有效的标识符(不要使用就对了)
- 在声明中使用关键字
- class deinit enum extension func import init internal let
- operator private protocol public static struct
- subscript typealias var
- 在语句中使用关键字
- break case continue default do else fallthrough for
- if in return switch where while
- 在表达式和类型中使用关键字
- as dynamicType false is nil self Self super true _COLUMN_ _FILE_ _FUNCTION_ _LINE_
- 在特定情况下使用的关键字
- associativity convenience dynamic
- didSet
- lazy
- left
- mutating
- none
- nonmutating
- optional
- overide
- postfix
- precedence
- prefix
- Protocol
- required
- right
- set
- Type
- unowned
- weak
- willSet
- 空格仅包含空格
- 字面量
数据类型
都是以 大写开头
- Int : Int32 Int64 整数
- Uint : 无符号整数 ,同样有 Uint32 Uint64
- Float 表示32位浮点数
- Double 表示64位浮点数
- Bool 代表布尔值
- String 这是有序的字符集合 eg: “hello World”
- Character 这是一个单字符的字符串, eg: “A”
- Optional 这表示可以容纳一个值活没有任何值的变量
-
32位平台上 Int大小与Int32 的大小相同
- 绑定值
Int8 1byte -127~127
UInt8 1byte 0~255;
变量
可以使用简单活 Unicode 字符来命名变量。
4. var 人名 = “JOKER”
5. var ❀ = “花”
- var name :String = “JOKER”
- var high : dataType =169
- 打印变量
- print(“my name is (name),and my age is (age)”)
可选类型
-
Optional
-
声明 可选类型
-
> var name : String? //问号前 没有空格 > name ="JOKER" > print(name) // ====>Optional("JOKER") > //可选类型使用数据值的时候,需要进行 解包 > print (name!) // 用 ! 强制解包 ====》 JOKER > var name : String! //使用 ! 声明变量为可选类型,可以自动解包 > print(name) ===> JOKER
-
可选绑定,输出的时候 如果 为 null值 ,则直接不输出该句。
Swift 常量
- let 声明
let name = "JOKER" let age: Int=10 let weight : Float =169.5
字面量
就是 C语言中的 常量
布尔值
> true false nil
范围值
(a…b) a~b 包含a 和b
(a…<b) 包含a 不包含b
流程控制语句。
- if …else…
- switch
if 条件表达式 { //必须有大括号
}else {
}
switch color {
case 0:
print("red")
fallthrough //继续往下走
case 1:
print("blue") // 默认 有 break; 添加break 也不会报错。
default:
print("other");
}
for var i=0 ; i<10 ; i++{
print ("i = \(i)")
}
var number =10;
while number <20 {
print ("number = \(number)" )
number-- //-- ++ 前后多不能 加空格
}
repeat {
number++ // 错误实例: number ++
print("repeat number \(number)")
} while number <20
for index in 1...10{
}
//不需要 index值时 可以用 _ 代替
for _ in 1..10{
字符串
- 创建字符串
var name : String = "JOKER"
var age : String = 18
name+ = age
print(name)
===> JOKER18
数组
对象类型
// 构建空数组对象
var someArray = [Int]()
//指定 初始长度,初始值
var array1 =[Int](count:10,repeatedValue:0)
//指定数组元素
var array2= [1,2,3,4,5]
//不可改变数组
let array3= [12,4,6,7]
//访问数组元素
array3[1]
//遍历 数组
for value in array3{
print("value \(value
va)")
}
- 元组
for (myIndex,myValue) in array3.enumerate(){
print("enume array3[\(myIndex)] = \(myValue)")
}
集合
集合就是 set类型的对象,表示的是一组无序的相同类型的数据集
- 创建集合
// 使用Set的构造函数,构建一个集合对象 var myTest1 =Set<Int>(); //构建一个空的集合对象。 myTest1 = [1,4,6,7,8]; //存储时 无序的。 var mySets ; Set = [12,3,5,7]
字典
{"key1":"value1","key2":"value2"}
-
声明一个字典类型的变量
var dic2: [int:int] = [1:10,2:30,3:30]
var dic3= Dictionary<String,String>()
dic3=["key1":"value1"]
-
访问字典
dic["key1"]
-
遍历字典
for (key,value) in dic3{ print("\(key) : \(value)") }
-
构造体类型
var studentMessage: (String,String) = ("joker","beijing") studentMessage.0 ==>>joker studenMessage.1 ====>> beijing
枚举
C 语言 enum WeekDay{
Mon,Fri
}
Swift :
enum WeekDay{
case Mon
case Fri
…
}
-
使用
var birthDay: WeekDay = WeekDay.Mon
-
switch birthDay{ case .Mon print("星期一") }
-
关联值
enum Student{
case SmallStudent(String ,String,String)
case BabybStudent(Int,Int,Int)
}
var xiaoMing =Student.SmallStudent("one","Two","THree")
switch xiaoMing{
case .SmallStudent(let word1,let word2,let word3):
print(”今天学了 3个单词\(word1) \(word2)“)
}
- 原始值
enum Color: Int{
case RED = 8
case Blue
case Yellow
}
Color(rawValue:10) ==>> Yellow
函数
- 使用 func 关键 开始定义函数
func func1(){
print("无参数,无返回值的函数")
}
func func2()-> String{
print("无参数 ,,有返回值 ,返回值为 字符串")
}
func func3(num1:Int,num2 Int)-> Int{
return num1+ num2
}
//使用 元组 作为函数的返回值类型
func func4()->(Int,Int){
return (5,7)
}
//调用
let result =func4
result.0 ===> 5
result.1 ===> 7
- 允许函数定义标签
func fun6(first num1:Int,num2:Int,num3:Int) -> Int{
return num1+num2+num3
}
// 一般默认第一个形参变量名时不作为标签出现的,如果你希望第一个参数也有标签,可以在形参变量名之前加一个标签
func6(first:3,num2:6,num3:9)
-
I/O 参数 ***inout *** 关键字
func muSwap(num1:Int,num2:Int){
}
闭包
自包含的函数代码块
- 闭包可以 自动根据上下文进行类型 推断,可以省略类型说明
- 可以使用闭包表达式进行优化
- 如果 闭包的语句只有一句,那么可以省略 return关键字
I/O参数
I/O 参数 (目的: 把形参生命为可以被修改的变量类型)
使用 inout 关键字
func mySwap(inout num1:Int,inout num2:Int){
let temp = num1
num1=num2
num2 =temp
}
var a= 9
var b=100
mySwap($a,num2:&b)
print("a= \(a) b= \(b)")
===> a =100 b= 9
函数类型及 用法
// 使用 函数类型, 第一类型 int float double
func mySum(num1: Int,num2:Int) ->Int{
return num1+num2
}
var action : (Int, Int) -> Int = mySum
// 可以使用 action 替代函数 mySum
action(1,2)
// 可以使用类型 作为函数的参数传递
func thirdNumSum(yourAction:(Int,Int) -> Int,num1:Int, num2:Int ,num3:Int)->Int{
}