字段 | 含义 | 例子 |
---|---|---|
var |
定义变量,设置之后可以修改 | var number: Int = 30 |
let |
定义常量,设置之后不可以修改一般情况下先用let,可以避免数据被修改,保证数据安全性 | let number: Int = 30 |
! |
强制解析 1.确定可选包含一个非nil的值,否则会运行错误 声明可选变量时使用感叹号(!) 2. 替换问号(?)这样可选变量在使用时就不需要再加一个感叹号(!)来获取值,它会自动解析。) | var myString:String? myString ="Hello, Swift!" if myString != nil { print( myString! )}else{ print("myString 值为 nil"} |
? |
可选(Optionals)类型,值会默认为 nil,在类型和 ?之间没有空格 | var optionalInteger: Int? |
?? |
||
as |
字面理解就是有保证的转换,从派生类转换为基类的向上转型 | // 将1转成float let num = 1 as CGFloat // dog转换到父类 animal class Animal {} class Dog: Animal {} let d = Dog() d as Animal |
as? |
Swfit代码写一段时间后会发现到处都是 ? ,这预示着如果转换不成功的时候便会返回一个 nil 对象。成功的话返回可选类型值(optional) | // Dog、Cat和Animal的转换关系class Animal {}class Cat: Animal {}class Dog: Animal {var name = "Spot"}let dog: Dog? = nildog?.name // 选择调用,返回空值nildog!.name // 强行调用,报错let animal: Animal = Cat()animal as? Dog // 猫转狗失败,返回nil animal as! Dog // 猫强行转狗,失败报错 |
as! |
理解:字面理解就是有强项转换,即向下转型,子类(派生类)向父类转换,官方解释说这是一个不被保证的转换,可能会因为强转的失败而会导致崩溃。同时 !是一个陷阱的标志,就像⚠️一样,用起来存在一定危险性 | // Dog到Animal的转化 class Animal {} class Dog: Animal {} let a: Animal = Dog() a as Dog // as不能将a转成Dog,即不能向下转换 a as! Dog // as!能强行将a转成Dog -> Bingo |
guard |
作为保卫作用 | // 如果有结果,那么看一下结果是否为空,为空退出 guard let placemarks = placemarks else { return } |
open |
可以被任何人使用,包括override和继承 | /// ModuleA:这个类在ModuleA的范围外是不能被继承的,只能被访问public class NonSubclassableParentClass {} |
public |
可以被任何人访问。但其他module中不可以被override和继承,而在module内可以被override和继承 | // 在ModuleA的范围外可以被继承open class SubclassableParentClass {} |
final |
不允许对其修饰的内容进行继承或者重新操作。final关键字可以在class、func和var前修饰 | public final class FinalClass { } |
internal |
默认访问级别,internal修饰符可写可不写,internal访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问。 | internal class InternalClass {} |
fileprivate |
访问级别所修饰的属性或者方法在当前的Swift源文件里可以访问 | fileprivate var name = "wangsan" |
private |
访问级别所修饰的属性或者方法只能在当前类里访问 | private var name = "wangsan" |
override |
重载 | // 重写方法 override func a() { } |
extension |
扩展 | //www.greatytc.com/p/edf4cad8dfd5 |
lazy |
懒加载,需要初始化一次 | lazy var first = NSArray(objects: "1","2" |
typealias |
已存在的类型重新定义名称 | typealias Location = CGPoint let point: Location = CGPoint(x:1 , y: 1) |
5种修饰符访问权限排序 :open > public > interal > fileprivate > private
不足的地方后续会继续添加
参考的资源:
1.Swift开发语法 : //www.greatytc.com/p/5e2d4c34f18e
- as、as!、as? 关键字 :http://blog.csdn.net/robinson_911/article/details/74139753
- open,public,internal,fileprivate private:
http://blog.csdn.net/sun_cui_hua/article/details/78021804 、//www.greatytc.com/p/604305a61e57
4.extension : //www.greatytc.com/p/edf4cad8dfd5
一个适合初学者swift的Demo:https://github.com/hrscy/DanTang(仅供参考学习)
下面是使用swift4.0 编写的Demo:https://github.com/guofeifeifei/swift-DanTang(仅供参考学习)