swift基础语法-1

首先创建swift的工程需要注意:

1>工程名不能使用swift  ,会影响编译

2>工程名不能使用  "中文 + 数字 "  如:项目01 , 这样是不行的


其次介绍一下swift 与 OC 的简单区别:

1> OC程序入口是  main.m 里的一些代码,而swift 的程序入口是@UIApplicationMain

2> OC的类后缀名是.h 和 .m , 而 swift 只有一个文件,后缀名是.swift

3> OC的类是以@interface  @end开始和结尾的;  而swift 是以class声明类   以{ } 开始和结尾

4> OC 一句代码结束用分号表示结束;而swift 不需要分号,换行表示结束



swift的特点:

没有了main.m  @UIApplicationMain是程序入口

只有.swift文件,没有.h/.m文件的区分
一个类就是一对{ },没有@implementation 和@end
语句结束没有分号
一般都是一行一句代码
打印使用print( )
swift中没有OC指针的概念
swift没有非零即真的概念,只有真或假


基础语法:

创建对象:  采用 ( )

let   用于修饰常量,赋值之后不允许修改
var  用于修饰变量,赋值之后可以修改
swift的类型是可以自动推导的,通过等号右边的值来判断变量/常量的类型   (option键 + 单击查看他的类型)

建议:尽量不要用自动推导,系统会占用资源,导致Xcode的缓慢
可以通过 变量名:类型  来指定变量的类型

可选项
 可选项很重要!!!!!!!!
 1> 要么有值要么没值
 2>可选项不能直接运算,直接运算的话需要解包

  1.可选项的概念: 在声明的变量/常量的类型后边 加一个问号注意: ?前边没有空格
 2.可选项不能直接运行,运行的话,需要解包;解包可以理解成 Optional去掉
      解包有2种方式: 强制解包(!);
                                        强制解包存在问题
                                         1>当没有值的时候,会发生崩溃
                       2>
有值就获取到解包之后的值
                   非强制解包 (??): 1>如果?? 前边的可选项有值,则取可选项里的值(相当于解包); 
                                                              2>如果 ?? 前边的可选项没有值, 则取 ?? 后边的
 3. 强制解包是可以使用的. 我们如何去使用呢? 我们在确保可选项肯定有值的时候,是可以强制解包的! 注意: 这个强制解包是 程序员自己认为的.并不是程序认为的,如果可选项没有值,还是会崩溃的


if  let 语法   --- 针对于可选项

if let  新变量名 = 可选项  {   新变量名的作用域  }

    1.    如果可选性为nil , 则if 语句 为 假

        如果可选不为nil,  则if 语句 为 真

    2.   新变量名为解包之后的值,作用域仅限于 { } 内

if  let 多个可选项的请求

if [let  新变量名 = 可选项],[let  新变量名 = 可选项] , ... {  新变量名的作用域  }

  [let  新变量名 = 可选项] 必须都为真,才可以进入if 后边的 { }


guard let  语法

与 if  let 相反 

guard let  新变量 = 可选项  else  {   }

1.    如果可选性为nil , 则执行 { } 里的代码

        如果可选不为nil,  则不执行 { } 里的代码

    2.   新变量为解包之后的值,作用域为 { } 后边


switch 
swift中switch case任何类型都可以处理,而 OC 中switch case 只能处理整型

字符串
swift里的String是结构体,OC里的NSString是对象
String和NSString可以相互转化,很多时候我我们需要把String转换成NSString来调用NSString的方法

集合(数组 字典)
数组
let 用于修饰不可变数组,var用于修饰可变数组



函数
func <#name#>[方法名](<#parameters#>[参数列表]) -> <#return type#>[返回值] {
     //方法体
    }


闭包
是一个匿名函数,函数调用的时候执行,不调用肯定不执行
一般是作为回调使用.作为一个参数去使用
循环引用.有self是一个条件/造成强强引用

尾随闭包:闭包作为一个函数的最后一个参数

逃逸闭包:@escaping 它不能在当前线程销毁/管理,其他线程会使用这个闭包,我们需要使用@escaping来修饰一下;修饰的作用是方便闭包的管理


闭包的循环引用


破除循环引用只要破除其中一条线就可以解决
解决循环引用的方式:
1>类似于OC的弱化,弱化self
weak var weakSelf = self

2>采用swift解决循环引用的方式:在参数列表前加 [weak self]
self 会变成可选
weak相当于OC里的weak
//ARC;iOS5; 用weak修饰的变量,当变量被回收之后,原来的地址被置为nil;
//当我们再次访问的时候,返回给你一个nil,不会崩溃
client.loadData { [weak self] (info: String) in 
    print(self?.view)
}

3>采用swift解决循环引用的方式:在参数列表前加 [unowned self]
unowned相当于OC里的assign
//MRC ;iOS4;代理/基本数据类型 ,用assign修饰的变量,当变量被回收之后,原来的地址不会置为nil
//如果已经被释放的对象,再次访问的时候,会造成"野指针'访问
client.loadData { [unowned self] (info: String) in 
    print(self.view)
}

命名空间

swift有类似Java的命名空间
在自己的命名空间里就不用导入
用其他命名空间就要导入

构造函数

init在swift中叫做构造函数

swift的初始化方法是init

swift是先完成本类属性的初始化,在调用父类的构造方法,完成父类的初始化工作,与OC不一样
super.init是自动调用的,是可以默认不写的,但是建议写


重写和重载没有任何关系

重写:子类重写父类的方法,在子类中通过override关键字去扩展父类
//如果不重写父类的方法,本类会直接调用父类的方法
//如果本类中有一些必须初始化的属性,我们把默认的init方法注释之后,系统就不提供给我们默认的构造方法

重载:函数名相同,参数类型不同,参数名不同,参数个数不同
//重载在OC里不存在
//但是OC里存在initwithXXX:
//重载时面向对象的重要特点,好多语言都有重载!!!


KVC构造函数

KVC给属性赋值的原理:系统会在运行的时候,动态地调用我们的对象的setValue  forKey 这个方法,来给属性赋值

在swift中,KVC构造函数中,要先完成父类对象的初始化,使用KVC实现字典转模型



get & set

只实现get叫计算型属性

实现了set  get  叫存储属性


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值