Swift

来源:互联网 发布:大数据特征的 4v 理论 编辑:程序博客网 时间:2024/05/16 18:14
Swift

概述
常量与变量
数据类型
运算符
字符串

Swift是Apple公司2014年推出一个用以应用开发的全新语言
2010年苹果开发者工具部门总监 Chris Lattner(底层架构一个人)
适用于 iOS 7+ 和 OS X Mavericks+的应用开发
Swift语言与之前的Objective-C可共存
底层还是使用Cocoa Touch,Foundation框架
Objective-C不是一个独立的OOP语言
可在既有的Objective-C程序中添加Swift语言所写的代码(调用既有的Objective-C代码库).
简洁是其主要设计目标之一
开发人员可以用更简短更清晰的代码完成同样的功能

Playground
Playground可让你输入代码并直接看到运行结果!

-------------------------------

变量与常量
定义常量/变量语法格式:
let / var 变量名[:数据类型]=表达式
注:当省略数据类型时,编译系统会自动根据其初值设定数据类型

命名规则:
任何字符(除数学符号、箭头、连线和制表符)
不能以数字开头
尽量不要与关键字冲突

print
向Console窗口输出指定的表达式,并换行。
NSLog(“”,表达式列表)
按照指定的格式进行输出,并且带时间戳。
例:NSLog(“Welcome %@”,name)
2016-09-30 20:33:35.648 MyPlayground[954:22144] Welcome 张三

字符串插值
在字符串内部加”\(变量名)”
例:
var name = “Jack”
print(“Welcome \(name)!”)
输出:Welcome Jack!

注释
行注释//
段注释/* */
语句结束符
;//(当一行中写多条语句时必须有,否则可省略)


----------------------------------

基本数据类型
整型
Int:Int8、Int16、 Int32、 Int64、Int
UInt:UInt8、UInt16、 UInt32、 UInt64
浮点型
Float,Double
布尔型
Bool
元组(值组)型
Tuple

typealias 自定义类型
typealias 整数 = Int
typealias 字符串 = String
var value:整数 = 100
var name:字符串=“Swift3.0”


------------------------

类型安全和类型推导
Swift是类型安全的。(即确定类型的变量不能赋值其他类型的值)
编译器确定变量类型的途径
一、显示声明
var sName:String
二、类型识别
var num = 12
num = 12.3 //?


-------------------------
元组 Tube
将多个不同类型的值组合成一复合值,该复合值类型称为Tube。
适用情况:函数返回值
例:var ClassInfo = (“iOS Program1401”,28)
print(“班级名称:\(ClassInfo.0),班级人数:\(ClassInfo.1)”)
var ClassInfo = (ClassName:”iOS Program1401”,numberOfStudent:28)
print(“班级名称:\(ClassInfo.ClassName),班级人数:\(ClassInfo.numberOfStudent)”)


-----------------------


可选(Optional)
C 和 Objective-C 中并没有可选类型这个概念。最接近的是 Objective-C 中的一个特性,
一个方法要不返回一个对象要不返回nil,nil表示“缺少一个合法的对象”。
然而,这只对对象起作用——对于结构体,基本的 C 类型或者枚举类型不起作用。
对于这些类型,Objective-C 方法一般会返回一个特殊值(比如NSNotFound)来暗示值缺失。
这种方法假设方法的调用者知道并记得对特殊值进行判断。然而,Swift 的可选类型可以让你暗示_任意类型_的值缺失,
并不需要一个特殊值。


----------------------

强制解析操作
let actualInt:Int = optionalIn!

---------------------

运算符
算术运算符
一元:-、++、—(自加,自减在swift3.0中已不再支持)
二元:+、-、*、/、%  (关于%,3.0中仅针对整形,实型采用truncatingRemainder成员函数替代)
合成操纵:+=、-=、*=、/=、%=
关系运算符
==、!=、>、<、>=、<=
===、!==  (引用比较)
逻辑运算符
!、&&、||
位运算符
~、&、|、^、<<、>>


------------------------

operator
区间运算符
1. 闭区间 …
数学中的[ ]
2. 半开半闭 ..<  
数学中的[ )


------------------------

assert(关系表达式,字符串)
断言方法判断表达式,为真中止程序运行,并输出相应的字符串,便于程序及时发现问题。


---------------------------

字符与字符串
字符
let c:Character = “c”
字符串
let s:String=“Hello”
let c1:Character=“a”
let c2:Character=“b”
let s1 = c1+c2
let s2 = String()


-------------------------

字符串常用成员
1.字符串是否为空(是否是零长度字符串)
isEmpty属性
2. 字符串的字符数
countElements成员函数
3. 两个字符串实例的值是否相等
==
4. 判断字符串的前后缀
hasPrefix    str.hasPrefix(“http://”)
hasSuffix    str.hasSuffix(“.png”)
5. 转换成大写或小写
uppercaseString or lowercaseString 属性



---------------------------

转换->其他类型
String -> other type
1.<type>.init(text:String)!    //例:Int.init(str)!
2.借助NSString
例:var str:String = “90.1”
let ns:NSString = str as NSString    //NSStirng 是OC中的类型
let d = ns.doubleValue
print(d)                            //输出90.1
两者区别:针对字符串非数字格式,方式1产生异常,方式2返回对应类型的默认值。

-------------------------------

数组(Array)

数组的声明及初始化
1. var intList = [12,13,54]        //赋初值
2. var intList2:[Int]                //说明
    intList2 = []                        //初始化
3. var intList3 = [Int]()            //
4. var intList4 = Array<Int>()    //最正规

错误方式:
1. var ArrayDemo = []        //编译器无法知道元素类型
2. var ArrayDemo:[String]
ArrayDemo.append(“Item 1”)    //错误,没有初始化
构造方法:
var list = [Int](repeating:Element,count:Int)
var list = Array(repeating:Element,count:Int)

数组属性
count属性:获取数组元素个数
判断数组是否为空,两种方式:
通过判断数组的元素个数是否为0
通过数组的isEmpty属性判断

数组的插入和删除
1. append:追加
2. insert(element,index):插入
3. +=:追加一数组
4. remove(index):删除数组中指定索引的元素
removeFirst、removeLast等

------------------------
Dictionary
字典中的数据是以键值对的形式存在的。是用来存放多组键(key)值(value)对的集合类型。
Swift中字典的键和值可以使任何类型。
字典的使用前提:
1.键值对的键和值的类型必须明确,可显示声明,也可通过类型识别;2. 声明后必须初始化;3 键必须实现哈希协议Hashable.
声明及初始化:
var dict1 = [1:1,2:2,3:3]
var dict2:Dictionary<String,String> = [:]
var dict3 = Dictionary<String,String>()
var dict4 = [String,String]()

1. count属性:字典的元素数量
2. 字典元素的访问,通过键值进行访问,例:dict1[键值]
3. 增加元素:对不存在的键值直接赋值
4. 字典元素的更改
1、直接根据键值修改
2、updateValue(value,forKey)
5. 字典元素的删除
removeValue(forKey)

------------------------

控制结构
顺序
条件
if,switch
循环
for,for in,while,repeat
跳转
break,continue,fallthrough,return,throw


------------------------
switch

1.单值,多值,区间匹配
2.元祖
    let boy =(10,”boy”)
    switch(boy)  {
        case (0…20,”boy”):
            print(“男孩”)
        case (21…100,”man”):
            print(“男人”)
        default:
            print(“其他”)
    }    //输出:男孩

switch--值绑定

可以在case字句用常变量来接收其他条件的值
let boy = (10,”girl”)
switch(boy) {
case (let age, ”boy”):
print(“男孩:\(age)”)
case (let age, “man”):
print(“男人:\(age)”)
case (let age, let sex):
print(“\(sex):\(age)”)
}        //输出:girl:10

注:
每个case分支,匹配成功执行完成后将跳转到整个结构的最后,不需要加上break语句。

如果需要向下穿透(完成c语言的不加break的效果)需要加上fallthrough语句


---------------------------

闭包(Closures)

Closures are self-contained blocks of functionality that can be passed around and used in your code.
Closures in Swift are similar to blocks in C and Objective-C and to lambdas in other programming languages.
Closures can capture and store references to any constants and variables from the context in which they are defined.
This is known as closing over those constants and variables, hence the name “closures”.
Swift handles all of the memory management of capturing for you.


闭包是自包含的功能代码块
闭包可获取对于其所在上下文中变量和常量的访问(因此而得名)
在代码中可被传递(类似于C中的函数指针)
概念上等同于C和Objective-C语言中的blocks和其他语言中的lambda表达式)
形式上与函数相同(实际上函数是特殊的闭包)


-------------------------

枚举类型(Enumerations)
枚举是一组相关值的公共类型定义
C中枚举将一组名称关联对应到一个整数的集合
Swift中的枚举类型更加灵活
无须为每个名提供值
无须仅限于整数,可以是字符串、整数或浮点数


------------------------
实例、类数据成员

实例数据成员
定义时不加任何前缀
属于实例所有,每个实例的成员空间独立
访问使用实例命进行访问

类数据成员
定义时加关键字static

class Class{
    var classID:Int
    static let maxOfStudents:Int = 30
    init(){
        classID = 0
}
init(_ classID:Int,_ numOfStudents:Int){
        self.classID = classID
}}

--------------------------

属性(运算属性)

对数据项的读写控制,封装。包含读控制器getter和写控制器setter
运算属性可以没有setter,但不能没有getter。
class Square{
var width = 0
var round:Int{
get{
return width * 4
}
set{
width = newValue /  4
}}    


-----------------------

lazy 懒加载
Swift提供了懒加载的机制,即只有正式使用某个属性时才加载该属性。使用关键字lazy。

class CityInfo{
init (){
sleep(10)
}}
class Metro{
var mName = “”
lazy var city = CityInfo()
}
var line1 = Metro()
line1.mName = “”地铁一号线”
print(“\(line1.mName)”)

------------------------

Methods方法

类型方法(Type Methods)
声明类的类型方法,在方法的 func 关键字之前加上关键字 class;
声明结构 体和枚举的类型方法,在方法的 func 关键字之前加上关键字 static。


------------------------

构造器(构造函数)
1、以init命名,不加func修饰符,不定义返回值
2、如果每个数据成员都不需初始化,可以不写构造函数,编译系统会默认提供一个;但是定义了就必须使用一个现存的。
3、常量的赋初值
如果定义时没赋初值,那么必须在构造函数中进行设定。


-----------------------

Inheritance继承

1、单继承
2、 采用override关键字对父类的成员进行覆盖
3、采用super关键字对父类成员进行访问
4、 Preventing Overrides
You can prevent a method, property, or subscript and entire class from being overridden by marking it as final.
Do this by writing the final modifier before the method,
property, or subscript’s introducer keyword
(such as final var, final func, final class func, and final subscript,final class).

-----------------------

Structs vs Classes

相同点
定义属性用于存储值
定义方法用于提供功能
定义附属脚本用于访问值
定义构造器用于生成初始化值
通过扩展以增加默认实现的功能
实现协议以提供某种标准功能

此外,类还支持
继承允许一个类继承另一个类的特征
类型转换允许在运行时检查和解释一个类实例的类型
解构器允许一个类实例释放任何其所被分配的资源
引用计数允许对一个类的多次引用



原创粉丝点击