//swift里面字符串不需要添加@符号
var str = "Hello, playground"
// 常量
// 用let声明一个常量,常量不可以修改
let number : Int32 = 15
//number = 14
// 变量
// 用var声明变量,可以修改变量
var number2 : Int32 = 22;
number2 = 21
// 分号
// 在swift里面可以省略分号,但是有一种情况下不能省略(多条语句放在同一行的时候不能省略)
var number3 = 13; var number4 = 14
// 在swift里面声明常量或者变量的格式是: 常(变)量修饰符 常(变)量名 : 常(变)量类型 = 常(变)量值
// 在swift里面我们声明变量或常量的事后可以省略它的类型,系统会根据我们给的值的类型去推断这个常量或者变量的类型
// 字符串
// 在Swift里方法的调用全部都是通过.来完成,很多方法名都是和OC,UI方法名一样,支持运算符重载,,比如一个"+",如果+ 的两边是数字,+的作用就是给两个数字做加法运算,如果是字符串,及时拼接两个字符串,编译器会根据运算符两边的内容不同,然后做相应的操作就是运算符的重载
var string = "Hello"
string.appendContentsOf(" World")
string += " Hehe"
// Swift支持中文或者表情符号来命名变量,它支持几乎所有的uncode的编码
// 等号的左右两边的空格要对称
var 哈哈 = "haha哈"
哈哈
var

= "你好"

+ 哈哈
// print可以打印一个变量或者常量,也可以直接打印字符串,在打印的字符串中添加变量需要用\(变量名)
print(哈哈,

,number2)
print("1244\(哈哈)6")
// 在做类型推断的时候如果给的是一个小数,系统会自动推断double类型而不是float
var number5 = 13.6
// Swift里面对int类型做详细的区分,分为Int32 ,Int64,Int8等,我们可以根据实际情况选择不同的类型以节省空间
var number6 : Int64 = 4
// 疑问:系统自动推断Int类型是Int8还是Int32还是Int64
// Swift里面拒绝隐式转换,即不能给两个不同数值类型的变量做符好运算
Int(number5) + number6
// 数组
// 和OC的数组不同,swift里面的数组可以存储数值类型,并且swift里面的数组是有类型的,类型是根据存储的内容来推断数组的类型.如果数组里面有多种类型,系统会自动推断为NSObject类型
var array1 = [1, 2 , 3]
array1[1]
// 可以通过append方法添加元素,添加的位置是最后一个
array1.append(5)
// 给数组指定下标的位置插入元素
array1.insert(0, atIndex: 1)
// 可以移除元素,根据下标,第一个,最后一个
array1.removeLast()
print(array1)
// 数组也可以直接相加,会把两个数组合并在一起
var array2 = [7,8]
array2 += array1
//字典
// 字典和OC相比从{}编程[]
var dic1 = ["name" : "wang", "age" : 4]
// 字典的取值是通过键值来取的
dic1["name"]
// 和OC一样,可以直接对某个键对应的值修改,如果没有这个键就新建一个键值对
dic1["number"] = 12345
for number in array1
{
print(number)
}
// 遍历一个字典的时候和OC是有区别的,swift遍历字典返回的是一个元组类型,我们可以通过下标0和1渠道对应的见和值
for index in dic1
{
print(index.1)
}
//元组
// 元组可以让我们自定义里面的类型
var httpError = ("request error",404)
// 元组可以通过下标来取到对应位置的值,也可以通过下标修改对应位置的值
httpError.0 = "request ERROR"
// 元组除了通过下标取值,修改,还可以给指定下标一个标记,以后通过这个标识来取值,修改
var httpError1 = (info : "request error", num : 404)
httpError1.info = "request ERROR"
// 可选类型
// 可选类型代表这个遍历可能是有值的,也可能没有值(nil),在swift里面拒绝做隐式转换,我们不能把一个可选类型赋值给一个基本类型
var strNumber : Int?
var numberStr : String = "1234"
strNumber = Int(numberStr)
// 如果想对一个返回值为可选类型的方法标识确定(能保证这个可选类型的返回值一定不为空),可以在后面添加!,告诉编译器这个可选类型肯定有值,可以按照正常的类型来处理
var strNumber2 :Int
strNumber2 = Int(numberStr)!
//for循环跟OC里面的是一样的,不同点在于swift里面的循环不需要加小括号,但是符号两边的空格数量需要对称,自增量后面需要加空格
for var i = 0; i < 5; i++
{
print(i)
}
var i = 0
//同意用while循环也不需要括号,但需要注意空格,while循环如果想执行一个死循环需要在判断条件的地方放一个bool值(true,false)
while i < 5
{
print(i)
i++
}
// if else 也不需要添加括号,写法和OC类似
if i == 10 {
print(i)
}
else
{
print("i != 10")
}
// switch case, 与OC用法相反,swift 里面的switch自带有break功能,我们不需要手动添加break,如果想要执行完某个case后继续下一个case,需要添加关键字fallthrough, 在选择的时候,我们可以设置一个范围,只要是满足这个范围内的数都可以执行case语句,范围可以重叠,但一个数值满足多个范围时,默认去最上面的语句执行,其他不执行
i = 3
switch i {
case 1...4: print("1")
// fallthrough
case 2...5: print("2")
default : print("ohter")
}
//函数
//func 函数名(参数名1 : 参数类型1, 参数名2 : 参数类型2, ....)->(返回值类型)
func sayHello(name name : String) -> String {
let str = name + " hello"
return str
}
var helloStr = sayHello(name: "

")
helloStr
// 结构体
struct Point {
var x : Int
var y : Int
func hello(){
print("haha")
}
}
var point = Point(x: 10, y: 10)
point.x = 20
point.hello()
// 类 swift 里面的类和结构体比较相似,类和结构体都可以有自己的成员变量,方法,都可以通过点语法找到对应的成员变量或者给成员变量赋值,都可以通过点语法来调用自己的函数,不同的敌方在于类在创建的时候必须给对应的成员变量一个初值,结构体不需要
class Person {
var name : String = ""
var age : Int = 0
func eat(){
print("eat")
}
}
var person1 = Person()
person1.name = "


"
person1.age = 10
person1.eat()
// 闭包 类似OC中的block,闭包可以理解为是一个代码块,放在一个大括号中,其中大括号里面有两部分,用in分隔开,in前面部分是类型,in后面的部分是具体的实现以及闭包的返回值
var test = {
(name : String) -> Int in
let num = Int(name)!
return num
}
var number11 = test("1234")