Swift中没有.h .m文件
Swift中.swift文件 声明实现不在创建
导入类名:不需要再导入类名 所有类名都是分开的 可以直接访问到
导入框架:直接导入框架名 如:import UIKit
OC程序入口是main函数
Swift代码是从上往下顺序执行@UIApplicationMain程序的主入口
class:用来声明类
实例:class AppDelegate: UIResponder -> class 类名:父类
导入代理协议名字:在父类后面继续添加逗号 写上代理、协议名字
Swift声明变量:var window: UIWindow?
Swift声明方法:func 用来表示方法
----------------------------
变量、常量的声明:
var 声明变量
let 声明常量 不允许改变
OC: 数据类型 名字 = 值
Swift:
var 名字:数据类型 = 值
let 名字:数据类型 = 值
Swift里面语句结束可以不写分号 但是如果一行有多条语句 必须添加分号
Swift也支持中文作为变量名
字符串可以直接通过+拼接
如果声明的对象是变量 但是并没有去改变这个变量的值 系统会提示可以声明成常量
Xcode7.3后(swift2.2) ++将在swift3中弃用 改成+=
Swift自动推断数据类型 如果没有告诉变量的数据类型会自动推断数据类型
Swift不同的数据类型不允许计算
数据类型转换:数据类型(要转换的变量)
如果声明变量的时候不想在声明的时候去赋值 必须添上变量的数据类型(没有推断的依据 推断不出数据类型)
--------------------------
Swift方法的定义和调用
func定义方法
func 方法的名字()
OC:
- (void) viewDidLoad{
}
Swift:
func
oc:
- (void)viewDidAppear:(BOOL)animated{
}
Swift:
func viewDidAppear(animated: Bool) {
}
---------------------
Swift中调用其他类的方法用.来调用
区间
全闭合区间 区间
半闭合区间
1 2 3 4 5
全闭合区间 1...5
1 2 3 4 (5)
半闭合区间 1..5
在 swift 中 提倡用区间
--------------------------
函数
{} 范围
func 函数名(){}
class 类名:父类{}
var 变量名 = 值
let 常量名 = 值
调用别的方法 通过.调用
color.redColor()
小括号代表是一个方法
--------------------------
可选类型(可空类型):
swift 数据类型是非常严谨的,语法不严谨(英文、中文) 在实际工作的时候,有可能会把一个空值赋给一个变量
swift 不支持不同数据类型赋值
故 swift出来一个解决办法--->可选类型(可空类型)
可选类型的符号:
? 表示声明的是一个可选类型,它也是一种数据类型
! 表示拆包 把可选类型转换成原有数据类型
拆包:转换成原有数据类型
Optional(傻狗)->傻狗
隐式拆包:可选类型变量后!->let name1:NSString! = name;
显式拆包:name!
声明:
var 变量名:数据类型?
var window: UIWindow?
----------------------------
as 作为、明确数据类型->使用(1、跟其他数据类型计算《两者是包含关系》 2、需要把子类转换成父类的时候)
as -> 明确数据类型->在使用的时候
as->子类转父类(明确子类是父类)
NSString是一个类->结构体string
***不同数据类型之间转换 必须有支持数据类型的转换方法才可以转换
***如果是自类转父类可以直接赋值
is 判断是不是某个数据类型 某一数据类型(类名)
swift 字符串判断==是否相同
插入字符串"XXX\(插入的内容)"
-----------------------------
枚举:
变化:不止可以把数字当做枚举,同时还可以把字符串当做枚举值,还可以把几个内容放在一个枚举值里面
变化:元素之前使用case表示
在使用的时候 枚举的名字.元素 、 .元素
rawValue 枚举里面的值
声明枚举的公式:
第一种、
enum 枚举名字:Int{
case 元素
case 元素
case 元素
}
第二种、
enum 枚举名字:Int{
case 元素,元素,元素
}
--------------------------------
元组:tuple
1.可以存放不同数据类型的元素
2.取值方式
1.可以使用下标取值,也是从零开始
2.通过key取值(必须定义)
公式: 1. (1,"mm",对象) 通过下标
2. (key:值,key:值) 通过key,可以取到不同类型的值key不需要引号
闭包:
封闭的代码块 也可以把函数当成一个闭包
let 闭包名字 = {(参数列表) -> 返回值类型 in
具体执行的代码
如果有返回值,就return返回值
}
in 前面是 声明 后面是实现 in后面进入代码块
swift:
数组 字典:[]
元组:()
oc:
数组:[]
字典:{}
1.完整公式
{(参数列表)->返回值类型 in 实现代码}
如:let block = {(a:Int, b:Int)->Int in return a + b}
2.简化版:无参数 无返回值公式
{实现代码}
如:let block = {}
3.简化版:有参数 无返回值公式
{(参数列表) in 实现代码}
如:let block = {(a:Int) in print(a)}
4.调用
闭包名()
如:block()
1.声明包含闭包的方法
func 方法名(闭包名:(参数列表)->返回值类型){ 闭包名(实参列表)}
如:func loadData(respose:(message:NSString)-Void){respose(message:"完成")}
2.调用包含闭包的方法
方法名{(参数列表) in 实现代码}
如:loadData{(message:NSString) in print(message)}
三:typealias 替代
typealias 要替代成的名字 = 要替代的数据类型
如:typealias Height = Float
结构体
1.增加方法(可以调用方法 也可以添加方法)
2.增加实例化方法
调用
使用实例化方法
结构体
1.改变
《1》自动生成实例化方法
《2》可以在结构体中 创建方法
《3》可以在结构体中 调用方法
2.公式
声明:
struct 结构体名{
let(var) 变量?
func(){}
}
如果方法 改变结构体中的 值 需要在方法前面加上mutabing
使用:
let(var) 变量名 = 结构体名.init()
let(var) 变量名 = 结构体名.init(实参)
3.与类的区别
1.结构体偏向于 处理数据
2.类 偏向于 处理逻辑、关系
3.类中的对象 有对象的特征:封装 继承 多态
4.引用计数的处理 结构体有专门处理变量的引用计数
网友评论