sagezhong

Swift学习笔记(一)
最近已经开始了项目中两个APP的重构,使用了Swift代替了原来的Objective-C,主要是为了让后面的人更容...
扫描右侧二维码阅读全文
21
2019/01

Swift学习笔记(一)

最近已经开始了项目中两个APP的重构,使用了Swift代替了原来的Objective-C,主要是为了让后面的人更容易维护以及拓展

第一节课

  1. 注意一:

在开发中,优先使用常量let,只有发现标识符需要修改时再使用变量var

目的:防止在其他不希望修改的地方,不小心将值修改掉

  1. 注意二:

常量的本质:指向的内存地址不可以修改,但是可以通过内存地址找到对应的对象,之后修改对象内部的属性

类型推导

  1. 如果定义在一个标识符时,有直接给该标识符进行赋值,那么可以将标识符后面的类型省略掉
  2. 编译器会根据我们后面赋值的类型,推导出前面标识符的类型,这个过程称之为类型推导
  3. 可以通过option + 鼠标左键来查看标识符的类型

基本运算

注意:Swift没有像OC一样的隐式转换,不同类型运算时需要转换成相同的类型

let a =10
let b =10.5
let result = Double(a) + b //转换方法 类型名(parameter)

逻辑分支

if

Swift中if和OC的区别

  1. if后面的()可以省略掉
  2. 没有非0(nil)即真 Bool(true/false)

guard

guard 判断条件 else {
    //为假执行这里面的语句
    return
}
//为真继续往下执行

switch

  • 基本用法与OC大部分一致
  • 区别 1. switch后面的()可以省略,2.case语句结束不用加break

用法补充:

  1. swift中switch case后面可以判断多个判断条件
  2. 如果希望case结束时,产生case穿透,case结束时加上fallthrough
  3. switch可以判断其他类型

3.1 判断浮点型

3.2 判断字符串

3.3 判断区间

循环

for

swift3.0开始只支持区间遍历

for i 0..<10 //半开半闭区间
for i 0...10 //闭区间
for _ 0...10 //如果一个变量或者常量暂时不会使用 可以用_代替

while

  1. while后面的()可以省略
  2. 没有非0即真 使用Bool(true/false)

第二节课

字符串

  • OC和Swift中字符串的区别

    • 在OC中字符串类型是NSString,在Swift中字符串类型是String
    • OC中字符串是@“”,在swift中是“”
  • 使用String的原因

    • String是一个结构体,性能更高
    • NS String是一个对象,性能略差
    • String支持直接遍历
    • Swift提供了String和NSString之间的无缝转换

定义字符串

  1. 定义不可变字符串 :使用let修饰
  2. 定义可变字符串:使用Var修饰

获取字符串长度

let length = str.characters.count 

字符串拼接

//字符串之间的拼接
let str1 = "str1"
let str2 = 'str2'
let str3 = str1 + str2

//字符串和其他标识符之间的拼接
let name = "sagezhong"
let age = "20"
let weight = "50"
let info = "my name is \(name),age is \(age),weight is \(weight)"

//字符串拼接过程中的格式化 例如03:04
let min = 3
let second = 4
let timeStr = String(format: "%02d:%02d",min,second)

字符串截取

let urlString = "www.sagezhong.top"
// 方式一: 将String类型转成NSString类型
let headerString = (usrString as NSString).substirng(to: 3)

let range1 = NSMakeRange(4,9)
let middleString = (urlString as NSString).substring(with: range1)

let footerStr = (usrStrng as NSString).substring(from:14)

//方式二: 直接使用String类型方法进行截取
let headerIndex = urlString.index(urlString.startIndex, offsetBy: 3)
let headerString2 = urlString.subString(to: headerIndex)

let startIndex = urlString.index(urlString.startIndex, offsetBy:4)
let endIndex = urlString.index(urlSring.startIndex, offsetBy:13)
let range = Range(startIndex..<endIndex)
let middleString2 = urlString.substring(with: range)

let footerIndex = urlString.index(urlString.endIndex, offsetBy: -3)
let footerString2 = urlString.subString(from: footerIndex)

数组

swift中的数组是一个范型集合

  1. 数组的定义

    • 定义不可变数组: 使用let修饰

    数组的类型(1)Array<String> (2) [String]

    • 定义不可变数组: 使用var修饰
  2. 对可变数组的操作
var arrayM = [String]()

//添加元素
arrayM.append("sagezhong")

//删除元素
arrayM.remove(at: Int)

//获取
let item = arrayN[Int]

//修改
arrayM[0] = ""
  1. 数组合并

如果两个数组中存放的是相同的元素,那么在swift中可以对两个数据进行相加,直接合并

字典

  1. 定义字典

    • 定义不可变字典 let dictM :[String:Any] let dictM :Dictionary<String:Any>
    • 定义可变字典 var dictM: [Stirng:Any]
  2. 字典操作
//添加元素
dictM["name"] = "sagezhong"
dictM["age"] = 20
dictM["weight"] = 50

//删除元素
dictM.removeValue(forKey: "name")

//修改元素
dictM["name"] = "sage"
dictM.updateValue("22",forkey:"name")

//查找元素
dict["age"]

//遍历字典
//遍历字典所有key
for key in dictM.keys
//遍历字典所有value
for value in dictM.values

元组

  • 元组是Swift中特有的而OC中没有的类型
  • 它是一种数据结构,类似于数组和字典,可以用于定义一组数据
  • 组成元组类型的数据可以称之为“元素”
  • 元组可以声明每一个元素的类型,而数组不可以

元组的定义

  • 元组的常见写法
let userInfomation = ("sagezhong", "1029", 20, 50)
// 给元素加上元素名
let userInfomation = (name: "sagezhong", id: "1029", age: 20, weight: 50)
  • 元组的简单使用
//官方的例子
let http404Error = (404, "Not Found")
//将元组的内容分解成单独的常量或者变量
let(statusCode, statusMessage) = http404Error
print(\(statusCode)) //结果是404
print(\(statusMessage))// 结果是Not Found
//分解元组时不需要的数据用"_"代替
let (justTheStatusCode, _) = http404Error
//获取里面的数据
let statusCode = http404Error.0
let statusMessage = http404Error.1
//也可以通过给元素命名获取
let http200Status = (statusCode: 200, description: "ok")
let statusCode = http200Status.statusCode
let description = http200Status.description
Last modification:November 24th, 2019 at 09:31 pm
请随意赞赏

Leave a Comment