/*
let 作为不需要修改的值得关键字 声明的为常量
若常量的值可变 则用 var
*/
let x = 0
let y = 9
let z = 8
let i = x + y + z
print(i)
var j = i
j += 1
print(j)
var type : NSInteger
var type1 : NSArray
var type2 : NSMutableArray
var type3 : NSString
var more,less,bet : NSInteger
var str = "hello world"
type = 1
type1 = [0,1,2,3,4]
/*
print 输出
全部为常量时 可以直接做加减乘数操作
若为有常量和变量时 变量为字符串 可通过"\()" 在括号内将常量的计算结果值 放入变为字符串类型
若有回车 换行 占位 要加上 \n 转义
常量也可在全部的字符串中 加 \() 在括号内放入常量
*/
print(x + y + z + j + i + type)
print(str + "\n" + "\(x + y + z + j + i + type)")
print(type1)
//注释与oc一样
// 分号 与oc 一样 可打可不打 若一行内 两句语句 需打上 分号;
//整数 有符号 负 正 零 无符号 零 正 数
let minvalue = UInt8.min //值为0 是UInt类型
let macvalue = UInt8.max //值为255 是UInt类型
// print(x + minvalue + macvalue) “+”不可用:请使用显式的类型转换或Strideable混合型算法的方法 Strideable待研究
let flo : Float = 1.00
// print( x + flo) 报错 类型不同
//先
// let res = x + flo 依旧报错 类型不同
let res = 3 + 1.00 //此时不会报错,系统会推断为double类型
let res1 : Double = 3 + 1.00 //不会报错,系统会推断为double类型
print(res)
print(res1)
let decimalinteger = 17
let binaryinteger = 0b1001 //二进制
let octalinteger = 0o21 //八进制
let hexadecimalinteger = 0x11 //十六进制
let e = 1.25e2 //指数 乘 10^2
let _e = 1.25e-2 //指数 乘 10^-2
let _0xe = 0x11p2 //十六进制用指数 为大小写 P p p后面跟数字表示乘2的几次方
let _0x1 = 0xA.1p2 //十六进制小数指数
let _0x2 = 0x1.1p2
print(decimalinteger,binaryinteger,octalinteger,hexadecimalinteger,e,_e)
print(_0xe,0xAp2,_0x1,_0x2,0x0.1p1,0001.1)
//进制小数转十进制
//例如 0b1.1 二进制小数 转十进制
//小数点前 1*2^0+ 小数点后 1/2^1 = 1.5
// 0b11.11 = 1*2^1 + 1*2^0 + 小数点后 1/2^1 + 1/2^2 = 3.75
//十进制小数转二进制
//将整数部分 /2 余(1 或 0) 商部分再/2 直到商为0为止
// 22/2 = 11 余 0 11/2 = 5 余 1 5/2 2 余 1 2/2 1 余 0 1/2 0 余 1
//然后从最后的余数 往前 从左到右排列就是 10110 这是二进制小数点前算法
// 1.1 = 1/2 0 余1 小数点前 0.1*2 = 0.2 取小数点前 0 再取小数点后0.2 * 2 = 0.4 取0
//结果为 1.0001 无穷
//1.5(d) 转b
// 1/2 0余1 取 1 0.5*2 = 1.0 取整 1 结果为 1.1(b)
//后续八进制同理
//八进制小数转十进制
//0o1.1 = 1*8^0 + 1/8^1 = 1.125
//十六转 十进制
//0x1.1p0 = 1*16^0 + 小数点前 1/16*2^0 = 0.0625 = 1.0625
//0x1.11p0 此时 小数点后面多少位 就/16的多少次方 从1开始
//0x11.11p0 = 1*16^1 + 1*16^0 + 1/16^1*2^0 + 1/16^2*2^0 = 17.066406
//十进制转十六进制同上
print(000123,1___0000_0,1__0_0_.1_0_1)
print(String(format: "%f",0x11.11p0))
//类型别名 通过关键字 typealies 将系统关键字转换为自己想用的关键字
//说实话 合作的话 也许会对自己有用
typealias hahaInt = Int
let value : hahaInt = 2
//布尔值相对于oc来说 YES 与NO 比 True 与 false 好理解 与java相同
if true{
print("真")
}else{
print("假")
}
// if 后可以不将判断条件放在括号里
// if 1 报错 与oc 不同 1在oc里为真 0 为假 这里不行
//应该 if 1 == 1
//元组
let test1 = (123,"123") //为int与string组成的元组
print(test1)
print(test1.0,test1.1) //使用.0 .1 来获取元组的第几个下标对应的值
let (value1 , value2 ) = test1 //定义一个元组等于初始元组
print(value1,value2)
//用 下划线 _ 来忽略元祖某一部分
let (value3,_) = test1 //定义一个元组 等于初始,但只取其第一个部分
print(value3)
let test2 = (123,"123",1.01)
let (value4,_ ,value5) = test2
print(value4,value5)
let test3 = (123,"123",1.01,111)
//let (value6,_ ,value7) = test3 本以为会自动省略其中,但是会报错 这样是不行的
let (value6,_ ,_,value7) = test3 //还是不是那么聪明的语法 哈哈哈哈
print(value6,value7)
//把别的元组的参数名拿过来 给附上值 作为自己元组的参数名 组合成元组 (一开始还以为可以拿参数名当类型来用)
let test4 = (value6 : 456 , value2 : "haha" , value6 : "error")
print(test4,test4.0,test4.1,test4.2)
//本以为参数名是对象(被oc 毒害不浅) 其实就是个名字
print(value6)
// value6 = 789 错误应为是let
var test5 = (123,"123")
var (value8,_) = test5
value8 = 789
print(value8)
//可选值 optionals
let possiblenumber = "123"
let convertednumber = Int(possiblenumber) //此时convertednumber 的值有两种情况 可能是123(int) 可能是其他值
let nownumber : Int? = Int(possiblenumber) //若正规的话 有没有必要这么写
let poss = "hello world"
let poss1 = Int(poss)
let poss2 : Int? = Int(poss)
let poss3 : Int! = hahaInt(poss)
let poss4 : Int! = Int(poss)
print(poss1,poss2,poss3,poss4) //结果为 nil nil none none
// print(poss1 + poss2 + poss3 + poss4) 报错 因为poss1 poss2 是可选值 不能参与计算
// print(poss3 + poss4)//这样是可以写出来不提示错误的 必须为int类型的值 但是值为none 计算错误 运行报错
//nil 情况
// poss2 = nil 虽然是可选值但是报错 因为是let类型 尽管poss2的输出值为 nil 但是不能直接赋值nil 需要Var
var code = 404
// code = nil 虽然是var 但是code 没有明确值类型 被推断为int 类型 所以不能直接赋值
//nil 定义为 不能用于非可选的常量和变量 如果需要处理确实,需要声明为对应的可选类型
var code1: Int? = 404
code1 = nil;//是可以的
var code2 : String? //此时code2 为nil 被自动设置为nil
//在oc中nil 表示一个空对象指正
//在swift 中 表示缺失值
//if强制解析
var code3 : String?
if code3 != nil{
print("haha")
}else{
print("lili")
}
//if while 语句
if let code4 = code3{
print("error")
}
code3 = "hello world"
if let code5 = code3{
print("hello" + code5)
}
var code8 = "123"
let code9 = 123 //此时 code9 被推测为 int类型
let code10 = Int(code9)// 此时 code10 是被 int(code9) 返回一个可选的int类型 其中 可选的int类型包括 一个就是int类型值 和 一个没有值 但不能是其他类型
//此时的code10 要么是int类型 要么是没有值
//所以下面的式子 code6 被接收到的应该是个可选类型 不是单独的一个明确类型
// if var code6 = Int(code9){ //这么写报错 需要加上可选类型 var code6 : Int?
// print("error \(code6)")
// }
if var code6 : Int? = Int(code9){
print("code6 = \(code6)")
// print(code9 + code6?)//code6 后面加问号肯定是不行滴 要加感叹号! 如果code6 没有值 则会崩
print(code9 + code6!)
}
let code11 = "hello"
if let code12 = Int(code11){
// print(code9 + code12!) //演示下崩的情况
}
//这么做不行 code13必须为
// let code13 : String? = ""
//
// if let code14 = String(code13){
//
// }
// Int(括号里 不能放一个可选值和一个 指定非可选值 只能放 推测固定类型)
//if while 语句中 if后面创建的变量和常量 只能在if 语句中使用 外侧不能使用
//错误处理 函数可以在声明中添加throws 关键词来抛出错误信息 如果函数能抛出错误消息,需在表达式中前置try 关键词
func canthrowanerror() throws{
}
do{
try canthrowanerror()
//没有错误消息抛出
} catch{
//有一个错误就抛出
}
输出为
17
18
53
hello world
53
(
0,
1,
2,
3,
4
)
4.0
4.0
17 9 17 17 125.0 0.0125
68.0 40.0 40.25 4.25 0.125 1.1
123 100000 100.101
17.066406
真
(123, "123")
123 123
123 123
123
123 1.01
123 111
(value6: 456, value2: "haha", value6: "error") 456 haha error
123
789
网友评论