篇幅比较长!!!如果真心想学习,还是找个安静的晚上,慢慢阅读,慢慢体会swift的轻妙之处,这里附上本人的github中的demo:https://github.com/tanzhiwen/SwiftTips
欢迎指导学习!!!
目录
01-变量和常量
02-运算符
03-可选项
04-条件语句
05-循环
06-字符串
07-元组
08-数组
09-字典
10-对象和类
11-枚举
12-属性
13-下标脚本
01-变量和常量
1.1基本数据类型
1.整数:Int
2.浮点数: Double表示64位浮点数,Float表示32位浮点数
3.布尔类型: Bool,布尔值只有 true 和 false 两种
4.字符串: String
5.字符: Character
1.2变量和常量
1.变量:值能被修改,var 修饰
2.常量:值不能被修改,let 修饰
var a =20
a =10
let b =20
//b = 10常量不能修改:error:'b' is a 'let' constant
1.会自动推导声明的变量或常量的属性
2.使用【option + 单击】键查看属性的类型
// 1.自动推导类型
let str ="ningcol"
let intValue =10
let floatValue =1.2
// 2.指定数据类型
let doubleValue:Double =10
02-运算符
1基本运算符
var a = 5
let b = 3
// 1.赋值运算符
let c = b
// 2.加减乘除
1 + 2
5 - 3
2 * 3
10.0 / 2.5
2任何情况下都不会做隐式转化,必须以相同类型进行计算
let num1 =1
let num2 =2.2
let num3 = Double(num1) + num2
3必须要显式类型的转化
let j =2.2
let i:Float =1.2
i + Float(j)
4.求余运算
a % b
5负号运算
let minusB = -b
6.组合赋值运算
a +=2
7.比较运算
1==1
2!=1
2>1
1<2
1>=1
2<=1
8.三目运算
let d = a > b ?100:200
9.空合运算
1.空合运算符( a ?? b )将对可选类型 a 进行空判断(可选项内容详见:04-可选项)
2.如果 aName 为 nil,则执行??后面的,否则执行aName(注意??两边都有空格)
var aName: String? ="ningcol"
//var aName: String? = nil
let bName = aName ??"aNameIsNil"
10.区间运算
1.闭区间运算符( a...b )定义一个包含从 a 到 b (包括 a 和 b )的所有值的区间
2.半开区间( a..
for index in 1...5 {
print(index)
}
for index in 1..<5 {
print("半开区间:\(index)")
}
11.逻辑运算
1.逻辑非(!a):布尔值取反
2.逻辑与( a && b ):只有 a 和 b 的值都为 true 时,整个表达式的值才会是 true
3.逻辑或( a || b ):两个逻辑表达式的其中一个为 tru e ,整个表达式就为 true
let allowedEntry =false
let enteredDoorCode =true
if !allowedEntry {
print("ACCESS DENIED")
}
if allowedEntry && enteredDoorCode {
print("Welcome!")
}else{
print("ACCESS DENIED")
}
if allowedEntry || enteredDoorCode {
print("Welcome!")
}else{
print("ACCESS DENIED")
}
03-可选项
1.可选值
可选值:可以有值,可以为nil(用 ? 表示可选值)
// URL 为可选项
let URL = NSURL(string:"http://www.baidu.com/")
// str 为可选项
var str: String? ="ningcol"
// var 的可选项默认为 nil
var a:Int?
print(a)
2 if let 语句
// if let : 确保 myUrl 有值,才会进入分支iflet myUrl = URL{
print(myUrl)
}
var aName: String? ="ningcol"
// var aName: String? = nil
var aAge: Int? =18
iflet name = aName,let age = aAge {
print(name + String(age))
}
// 可以对值进行修改
ifvar name = aName,let age = aAge {
name ="lisi"
print(name + String(age))
}
3.guard let
1.guard let 和 if let 相反。表示一定有值,没有就直接返回
2.降低分支层次结构
3.playground不能展示效果,要在函数中展示
// 创建一个类(详见:10-对象和类)
classtest{
func demo(){
let aNick: String? ="ningcol"
let aAge: Int? =10
guard let nick = aNick ,let age = aAgeelse{
print("nil")
return
}
print("guard let: "+ nick + String(age))
}
}
var t = test()
t.demo()
4.强制解包
// 创建一个数组(详见:08-组数)
var dataList:[String]?
dataList = ["zhangsan","lisi"]
/*********************************************************************
1.dataList? 表示 datalist 可能为 nil
2.如果为 nil, .count 不会报错,仍然返回 nil
2.如果不为 nil,.count执行,返回数组元素个数
4. ?? 空合运算符(详见:02-运算符)
*********************************************************************/
let count = dataList?.count ??0
// 表示 datalist 一定有值,否则会出错!
let cou = dataList!.count
04-条件语句
4.1.if语句
/*********************************************************************
1.必须要有大括号
2.没有"非零即真"的概念,只有ture/false
*********************************************************************/
let num =20
ifnum >10{
print("大于10");
}else{
print("小于或等于10")
}
4.2switch
/*********************************************************************
1.值可以是任何类型
2.作用域仅在 case 内部
3.不需要 break
4.每一个 case 都要有代码
*********************************************************************/
let name ="nick"
switchname {
case"nick":
let age =18
print("one\(age)")
case"fil":
print("two")
case"Davi":
print("three")
case"":break//相当于有一行代码
case"tom","ningcol":
print("tomAndNingcol")
default:
print("other")
}
switch分支使用范围
let count = 3_000
var naturalThings:String
switchcount{
case0:
naturalThings ="数字0"
case1...3:
naturalThings ="数字1-3"
case4...9:
naturalThings ="数字4-9"
case10...99:
naturalThings ="数字10-99"
case1000...9999:
naturalThings ="数字1000-9999"
default:
naturalThings ="数字9999以上"
}
print(naturalThings);
//输出:数字1000-9999
5.1 for循环
// 去掉了C语言风格的循环( ..< 区间运算符,详见:02-预算符)
foriin0..<10{
print(i)
}
print("----步长循环-----")
// 递增(步数为2)
foriinstride(from:0, to:12, by:2) {
print(i)
}
print("开始递减")
// 递减
foriinstride(from:12, to:0, by: -2) {
print(i)
}
print("----反序循环----")
let range =0...10
// 反序循环
foriinrange.reversed(){
print(i)
}
5.2循环结构while
/*
while语句,只有当 ip<5 为 false 才跳出 while语句
*/
varip = 0
while (ip<5){
print("ip=\(ip)")
ip += 1
}
//运行结果
//ip=0
//ip=1
//ip=2
//ip=3
//ip=4
/*
repeat-while 循环,不管pa是多少,先执行一次,在判断,为false 跳出 do while语句
*/
varpa = 5
repeat{
print("pa=\(pa)")
pa += 1
}while (pa<5)
//运行结果
//pa=5
06-字符串
1.String 结构体,效率比对象高,一般推荐使用,支持遍历
2.NSString 继承NSObject
var str:String ="Hello你好"
//var st:NSString = "hah"
// 字节数量
print(str.lengthOfBytes(using: .utf8))
// 字符串长度
print(str.characters.count)
forainstr.characters{
print(a)
}
// 字符串拼接
let name:String? ="老王"
let age =80
let location ="隔壁"
print(location + (name ??"a") + String(age) +"岁")
//'\(变量名)' 会自动转换拼接
print("\(location)\(name)\(age)岁")
let rect = CGRect(x:0, y:0, width:100, height:100)
print("\(rect)")
// 格式字符串
let h =13
let m =5
let s =9
let timeStr = String(format:"%02d:%02d:%02d", arguments: [h,m,s])
let timeStr1 = String(format:"%02d:%02d:%02d", h,m,s)
1.在Swift中使用 Range,最好把 String 改成 NSString
2.str.substring(with: Range) 很麻烦
3. '值 as 类型' 作为类型转换
(str as NSString).substring(with: NSMakeRange(2,5))
let index = str.index(str.startIndex, offsetBy:3)
str.substring(from: index)
// "123"只是用来取到索引位置
str.substring(from:"123".endIndex)
print("****\(str.substring(from: "123".endIndex))")
str.substring(to: index)
String 使用 Range
let myRange = str.startIndex..
str.substring(with: myRange)
let myRange1 = index..
str.substring(with: myRange1)
07-元组
// 元组的元素个数固定,不允许增加、删除
var stu = (404,"小白")
// 支持嵌套
var msg = ("基本信息", ("李刚",34))
print(stu)
print(msg)
var (a,b) = stu
print(a,b)
//如果仅需要元组中的个别的值,可以使用"_"的方式来处理不需要的值
let (c,_) = stu
print(c)
//通过序号获得元组的值
print("status is \(stu.0)")
// 可以修改
stu.0=500
let message = (status:100, msg:"哈哈")
print("message is \(message.status)and \(message.msg)")
08-数组
8.1 数组定义
使用let修饰的数组是不可变数组
使用var修饰的数组是可变数组
//方括号 [] 来创建数组
let array1 = ["zhangsan","lisi"]
let array2 = [1,2,3,4,5]
var array3:[Int]// 定义一个数组(没有初始化)
array3 = [Int]()//初始化
//声明空数组,(必须初始化)
let array4 = [String]()// 等价上面两行代码
let array5:[Any] = ["zhangsan","lisi",20]
var arr3 = [Double](repeating:0.0, count:3)//[0.0, 0.0, 0.0]
var arr4 = Array(repeating:3.0, count:3)//[3.0, 3.0, 3.0]
var arr: [String] = ["Alex","Brian","Dave"]
print(arr.count)
print(arr[0])
8.2数组遍历
// forin方式
for name in array1{
print(name)
}
// 遍历数组
for i in 0..
print(array2[i])
}
//区间遍历
for item in array2[0..<2] {
print("item\(item)")
}
// 同时遍历下标和内容
print("=====同时遍历下标和内容=====")
for e in array2.enumerated(){
print(e)
//offset 下标element 值
print("元组 \(e.offset) \(e.element)")
}
//下标和值同时遍历
for(n, s) in array2.enumerated() {
print(n,"===", s)
}
// 反序遍历
for a in array2.reversed(){
print(a)
}
// 遍历下标和数值 反序
for(xxx,ooo)in array2.enumerated().reversed() {
print(xxx,"==",ooo)
}
未完待续。。。
如果你坚持看到这里就可以走向知识的大门 哈哈!!!