Note
临时笔记
- UIButton 可以通过 currentTitle 获取当前按钮的标题, 可以使用 tintColor 设置主题渲染颜色
- Optional 类型只有两个值 例如: 可以被赋值为非空的的 String, 或者 nil
- 未设(Not Set) nil
- 有值的
- 如果想要获取 Optional 值, 就得为 Optional 类型的值解包, 有 "!" 强制解包的方法来获取值, 但是如果没有值就会崩溃
- == 有时候被称为结构相等,而 === 则被称为指针相等或者引用相等
- Swift 中,像是数组这样的集合类型也都是对引用类型的封装,它们同样使用了写时复制的方式来在提供值语义的同时保持高效。不过如果集合类型的元素是引用类型(比如一个含有对象的数组)的话,对象本身将不会被复制,只有对它的引用会被复制。
- 定义在类或者协议中的函数就是方法(method),不是方法的函数称为自由函数(free function),自由函数和那些在结构体上调用的方法是静态派发(staically dispatched)。对于这些函数的调用,在编译的时候就已经确定了。对于静态派发的调用,编译器可能能够内联(inline)这些函数,也就是说,完全不去做函数调用,而是将这部分代码替换为需要执行的函数。静态派发还能够帮助编译器丢弃或者简化那些在编译时就能确定不会被实际执行的代码。类或者协议上的方法可能是动态派发 (dynamically dispatched) 的。编译器在编译时不需要知道哪个函数将被调用。
1.懒加载
- 格式: 定义变量时前面使用 lazy 来修饰变量, 后面通过等号赋值一个闭包
- 注意点:
- 必须是用 var 变量修饰
- 闭包后面必须跟上 ( ) 代表闭包被调用执行
lazy var dataList: [String] = { return ["cj", "nim", "niini"] }()
2.调整 UITextFirld 的光标位
- 通过设置 textField 的 leftView 来实现
inviteCodeTextField.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 80)) inviteCodeTextField.leftViewMode = UITextFieldViewMode.Always
3.设置 UIButton 中标题和图片的位置(左右)
- 默认左边是图片, 右边是文字
- 设置成左边文字, 右边图片, 或者其他样式(上下)
- 一般图片和文字的左右成对出现
self.carNoChooseBUtton.setTitle("省份", forState: UIControlState.Normal) self.carNoChooseButton.setImage(UIImage(named: "icon_down_peccancy"), forState: UIControlState.Normal) self.carNoChooseButton.imageEdgeInsets.left = 37 self.carNoChooseButton.imageEdgeInsets.right = 5 self.carNoChooseButton.titleEdgeInsets.left = -15 self.carNoChooseButton.titleEdgeInsets.right = 15
4.设置粗体字体
let label.font = UIFont.boldSystemFontOfSize(14)
5.数组的简单语法
快速创建空数组
var dataList: Array<String> = [] // 不推荐 var dataList: [String] = [] // 不推荐使用 var dataList = [String]() // 推荐使用
字面量语法构造数组
var dataList: [String] = ["漆面", "内饰", "工况"] // 推荐使用
判断数组是否为空
// 不推荐 if dataList.count > 0 { print("数组不为空") } // 推荐使用布尔值 isEmpty 来判断 if dataList.isEmpty { print("数组不为空") }
数组添加项
- 使用 append(_:)方法在数组后面添加一个新的数据项
- 注意: 使用 append 前数组必须是已经存在的, 至少是一个空数组
var dataList: [String]? // 只是对数组进行了声明, 并没有实例化, 只是初始化为 nil dataList.append("Hello") // 添加不了, dataList 还是 nil
- 可以使用加法赋值运算符 += 在数组后面添加一个或多个数据项, 但是不推荐使用
var dataList = [String]() dataList += "牛奶" // 添加一个数据项 dataList += ["鸡蛋", "面包", "水果"] //添加多个数据项
6.自定义导航栏
self.navigationItem.titleView = titleView // titleView是自定义的导航栏中间显示的控件
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor() // 控件的着色, 比如文字颜色, 默认渲染蓝色
self.navigationController?.navigationBar.barTintColor = UIColor(fromHexString: "#232736") // bar 的主颜色, 背景色
7.截取字符串
截取中间某段字符串
// 时间字符串 let str = "2016-07-12 16:52" let range = str.startIndex.advancedBy(5)..<str.startIndex.advancedBy(10) // 获取范围5(含)-10(不含) self.updateTimeLabel.text = str.substringWithRange(range) // 截取的结果是 "07-15"
截取到某个索引前的字符串
self.updateTimeLabel.text = str.substringToIndex(str.startIndex.advancedBy(7)) // 取0-7(不含)位数, 截取的结果是 "2015-07"
从某个索引开始截取剩下字符串
self.updateTimeLabel.text = str.substringFromIndex(str.startIndex.advancedBy(11)) //取出11位(含)的字符串 结果是"16:52"
8.设置 UITextField 的 placeHolder 的文字颜色
testTextField.attributedPlaceholder = NSAttributedString(string: "placeholder text", attributes: [NSForegroundColorAttributeName : UIColor.redColor()])
9.guard 提前退出
相比于可以实现同样功能的 if 被执行而不需要将它包在 else 语句, 按需使用 guard 语句会提升我们代码的可靠性。 它可以使你的代码连贯的块中, 它可以使你处理违反要求的代码使其接近要求。
10.万能的 String
String 的类型初始化函数是一个没有类型约束的泛型函数, 也就是说任意类型都可以用来创建一个字符串, 这是因为 String 类型的初始化函数有一个重载
extension String {
public init<T>(_ instance: T) {
self.init()
_print_unlocked(instance, &self)
}
}
这里的字符串不是一个可输出类型,而是作为输出流来使用。_print_unlocked 将 instance 输出到字符串流中。
11.GCD 延时操作
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2, execute: {
// code
})