SWIFT开发入门
概念
项目文件管理
- 项目中的所有.swift文件都会被引入,不再需要在单个文件中用import引入
- 没有了宏定义 #define,直接用let定义即可
常用变量操作
var 和 let
- var 定义变量,可以在后面的代码中修改变量的值
- let 定义常量,值不能被修改
- 可以在一行中声明多个变量或常量,用逗号分隔
let myName : String = "Cheney Lin"
var userName : String = "Jack"
可选对象变量(Optional)
- 在定义对句变量时,在类型后加一个?表示可选对象变量(可为空的意思)
- 在定义对句变量时,在类型后加一个!用于明确赋值
- 在 Swift 中, nil 不是指针,他是值缺失的一种特殊类型,任何类型的可选项都可以设 置成 nil 而不仅仅是对象类型
var myName : String?
var myName : String? = nil
var myName : String! = "Cheney Lin"
使用可选对象变量时,有几种方式:
- 正常使用:在变量后面加一个?,需要进一步处理或函数调用
- 强制使用:在变量后面加一个!,一般用于明确之前代码已经赋值的情况下使用
- 默认值使用:在变量后面加个 ?? (nil合并运算符),用于给出默认值
- 引用使用:新建一个变量,引用要处理的变量,用IF语句来做控制逻辑
NSLog(%@,myName!)
NSLog(%@,myName??"Cheney Lin")
if let newName = myName?
{
NSLog(%@,newName)
}
字符串处理
基本操作
- 定义字符串,用双引号”Cheney Lin”,不需要前面加@
- 用+连接字符串即可合并字符串
- 用String.init(value:Int64)即可将数字转换为字符串
- 用isEmpty判断空字符串
- 多行字符串是用三个双引号引起来的一系列字符
let memo:String = """Hello World,\n
I am Cheney Lin."""
- Swift 用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量的值替换这些占位符。将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义:
print("myName的值为:\(myName)") // myName的值为:Cheney Lin
遍历字符
for-in 循环遍历 String 中的每一个独立的 Character
func isIncludeChineseIn(string: String) -> Bool
{
for value in string
{
if ("\u{4E00}" <= value && value <= "\u{9FA5}") {
return true
}
}
return false
}
字符串-访问和修改
字符串索引
- 每一个 String 值都有相关的索引类型, String.Index,它相当于每个 Character 在字符串中的位置
- startIndex 属性来访问 String 中第一个 Character 的位置。
- endIndex 属性就是 String中最后一个 字符后的位置
- endIndex 属性并不是字符串下标脚本的合法实际参数 如果 String 为空,则 startIndex 与 endIndex 相等
- 使用 index(before:) 和 index(after:) 方法来访问给定索引的前后
- 要访问给定索引更远的索引,你可以使用 index(_:offsetBy:)
- 使用 indices 属性来访问字符串中每个字符的索引
插入
- 插入字符,使用 insert(_:at:) 方法
- 插入另一个字符串的内容到特定的索引,使用 insert(contentsOf:at:) 方法
删除
- 移除字符,使用 remove(at:)方法
- 移除一小段特定范围的字符串,使用 removeSubrange(_:) 方法
字符串-子串和字符串比较
子字符串
- 使用下标或者类似 prefix(_:) 的方法得到的子字符串是
- Substring 类型 Substring 拥有 String 的大部分方法
- Substring 可以转成 String 类型
- 子字符串重用一部分原字符串的内存
- 修改字符串或者子字符串之前都不需要花费拷贝内存的代价
- String 和 Substring 都遵循 StringProtocol 协议,也就是说它基本上能很方便地兼容所有 接受 StringProtocol 值的字符串操作函数
字符串比较
- 字符串和字符相等性(==和!=)
- 前缀相等性 hasPrefix(_:)
- 后缀相等性 hasSuffix(_:)
本地存储 UserDefaults
UserDefaults可用于存储一些设置参数,不建议存储复杂的数据结构。
struct defaultsKeys {
static let key1 = "key1"
static let key2 = "key2"
static let key3 = "key3"
}
let defaults = UserDefaults.standard
// 写入
defaults.setValue("Some String Value", forKey: defaultsKeys.key1)
defaults.setValue(100.0, forKey: defaultsKeys.key2)
defaults.setValue(true, forKey: defaultsKeys.key3)
// 读取
if let value1 = defaults.string(forKey: defaultsKeys.key1) {
print(value1)
}
let value2 = defaults.float(forKey: defaultsKeys.key2)
print(value2)
let value3 = defaults.bool(forKey: defaultsKeys.key3)
print(value3)