1.guard语句:
功能与if语句相同:基于一个表达式的布尔值去判断一段代码是否该被执行。与if不同的是:guard语句只有在条件不满足的时候才会执行这段代码,多用在可选绑定。如下例:
func fooGuard(x: Int?) {
guard let x = x where x > 0 else {//where语句是对表达式加上一个约束
// 变量不符合条件判断时,执行下面代码
return
}
x.description
}
如果条件(x>0)不符合,guard的else语句就运行,从而退出这个函数,如果通过了条件判断,可选类型的变量在guard语句被调用的范围内会被自动的拆包 - 这个例子中该范围是fooGuard函数内部。
2.@objc:修饰后的类型可以直接供 Objective-C 调用。
@IBAction/@IBOutlet:修饰的变量与函数表示与xib文件或者storyboard关联。
lazy:只能修饰var,修饰后的变量只有在第一次使用后才会初始化,而不是像普通var变量在大类初始化时跟着初始化。
wear/strong/unowned:与对象的自动引用计数有关。
Outlet/Outlet Collection/Action:修饰控件,Outlet修饰的控件以定义变量的方式将控件链接到代码,该变量代表控件;Action修饰的控件以定义方法的方式将控件链接到代码,该方法在用户与控件进行交互时运行。
3.在使用view.addSubview添加UIView时,视图按照加入的顺序覆盖。
4.在设置Segue时show是将新的视图控件push到视图堆栈的顶端予以显示,然后通过按键pop返回上一视图,所以会有系统自带的反回按键,show detail 是用新的视图替换原始图,所以没有返回按钮也无法返回。present modally是使用模态展示,弹窗上的交互没有结束前是不能操作主页的。
5.as的使用场合:(1)从派生类转换成基类:let animal = cat as Animal
(2)数值转换:let number = 42 as CGFloat
(3)switch语句中进行模式匹配(即当不知道一个对象的类型可使用switch检测类型):
switch animal {
case let cat as Cat:
print("如果是Cat类型对象,则做相应处理")
case let dog as Dog:
print("如果是Dog类型对象,则做相应处理")
default: break
}
(4)as!的使用:
向下转型时使用。由于是强制类型转换,如果转换失败会报 runtime运行错误。
(5)as?的使用:as? 和 as!操作符的转换规则完全一样。但 as? 如果转换不成功的时候便会返回一个 nil对象。成功的话返回可选类型值(optional),需要我们拆包使用。
6.“App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app’s Info.plist file”
找查资料后发现,新特性要求App内访问网络请求,要采用 HTTPS协议。
但是现在公司的项目使用的是 HTTP 协议,使用私有加密方式保证数据安全。现在也不能马上改成 HTTPS协议传输。
最终找到以下解决办法:
1、在Info.plist中添加 NSAppTransportSecurity类型 Dictionary ;
2、在 NSAppTransportSecurity下添加 NSAllowsArbitraryLoads 类型Boolean ,值设为 YES;
7.通用的splitViewController:
参考:http://nshipster.cn/uisplitviewcontroller/
8.iOS中显示文字方式有三:UILabel,UITextField,UITextView,其中能够接受用户输入的有UITextField和UITextView,而UITextView支持多行文字。
9.Xcode工程目录的folder和group的区别:
参考:https://www.jianshu.com/p/2ddba8c0062c
xcode中加入资源文件夹:
要到项目实属性->Build Phases中的Copy Bundle Resources加上文件夹。