IOS APP开发
1、编程语言
ios目前流行的两种开发语言:Objective-C和Swift。Objective-C是Apple自90年代以来使用的一种面向对象的编程语言,其结合了C和Smalltalk的优点。Swift则是IOS/Mac之后开发的主流语言,它是由Apple创建并于2014年在全球开发者大会推出的一种新的开发语言,旨在替代Objective-C。这两种语言对于iOS应用程序而言,是“最原生”的开发语言。但是,Swift并不是Objective-C的直接继承者,它们有着不同的功能。虽然不是直接继承,但并不表示两种语言之间毫无联系,实际上Swift和Objective-C共用一套运行时环境,Swift的类型是可以桥接到Objective-C,反之亦然,因此两者是可以互相引用混合编程的。另外,OC之前累积的很多类库,在Swift中大部分依然可以直接使用。OC中出现的绝大多数概念,比如:引用计数、ARC、属性、协议、接口、初始化、扩展类、命名参数、匿名函数等等,在Swift仍旧有效(只不过有些概念可能换了个术语去表达)。当然,作为新的语言,Swift也多出了一些OC没有的新概念,比如:范型、元祖等等。
-Swift的优点
- swift注重安全,OC注重灵活
- swift注重面向协议编程、函数式编程、面向对象编程,OC注重面向对象编程
- swift注重值类型,OC注重指针和引用
- swift是静态类型语言,OC是动态类型语言
- swift容易阅读,文件结构和大部分语法简易化,只有.swift文件,结尾不需要分号
- swift中的可选类型,是用于所有数据类型,而不仅仅局限于类。相比于OC中的nil更加安全和简明
- swift中的泛型类型更加方便和通用,而非OC中只能为集合类型添加泛型
- swift中各种方便快捷的高阶函数(函数式编程) (Swift的标准数组支持三个高阶函数:map,filter和reduce,以及map的扩展flatMap)
- swift新增了两种权限,细化权限。open > public > internal(默认) > fileprivate > private
- swift中独有的元组类型(tuples),把多个值组合成复合值。元组内的值可以是任何类型,并不要求是相同类型的。
-Swift的缺点
- 版本不稳定
- 公司使用比例不高,使用人数比例偏低
- 有些语法其实可以只规定一种格式,不必这样也行,那样也行。像Go一样禁止一切(Go有点偏激)耍花枪的东西,同一个规范,方便团队合作和阅读他人代码。
2、Swift基础知识
2.1 分号
和java和C、C++不同的是,其语句后无需分号。
2.2 基本类型
2.2.1 常量和变量
-
定义和声明
常量在一开始被声明之后就一直保持同样的值,而变量在声明之后可以被改变。常量意味着它是不可变的,而变量则是可变的。使用let创建一个常量,使用var创建一个变量。
var myVariable = 42
myVariable = 50
let myConstant = 42
-
自动类型推断
每个常量和变量在Swift中都有一个类型,但是我们无需显示的把类型写出来。当我们声明了一个变量或常量的时候,我们需要提供给这个变量和常量一个值,这样编译器就会自动推导它的类型(类型C++的auto)。比如上面的例子中,编译器从我们赋的右值推断出myVariable和myConstant都是一个整型。
-
类型转换
一旦常量或者变量有了一个类型,那么这个类型就不能再改变。值永远不会隐式地转换为另外一种类型,如果想要进行类型转换,那就需要显示地创建一个期望的类型的实例,假设我们想将Int类型的值转换为String类型的值:
let a = "the width is"
let b = 94
let c = a + String(b)
除了这种方式之外,还有一种更简单的方式可以将值转换为String类型:在圆括号中写值,并在圆括号的开始处插入反斜杠“\”,这就是十分常见的字符串插值表达式:
let a = 3
let b = 5
let c = "I have \(a) apples."
let d = "I have \(a+b) pieces of fruit."
这里需要注意,值本身的类型并没有被转换哈,只是利用这个类型的值生成了需要转换类型的一个临时实例。比如这里,a+b可以做计算等于8,因为它们本身整型3、5,这个计算的结果8被转换了一个临时的实例“8”字符串,后面再去检查变量a和b的类型会发现依旧还是Int型,这个概念不要混淆。
-
未赋初值情况
如果初始值提供不了足够的信息,或者直接没有赋初值,那么就需要通过在变量名之后为其指定类型,中间通过冒号分隔。
let a = 70
let b = 70.0
let c : Double = 70
-
可选类型
在值的类型后面加上问号?,标记该值为可选类型。使用可选类型去处理值可能会出现“值缺失”的情况。可选类型的值要么包含一个值,要么就是一个表明值缺失的nil(没有值)。
let a : Int? = 9
为了从一个可选类型中得到隐含的值,需要对其进行解包。当然,也可以采取更加直接的方式,那就是用强制解包操作符号!来进行解包。需要注意的是,只有当我们确定隐含的值不为nil的时候,才可以用强制解包操作符!来进行解包。比如上面代码中的可选类型a,我们确定其值不是nil,那么就可以对其进行强制解包来得到其类型:
let b:Int = a!
可选类型在Swift中是十分普遍的应用。在很多情况下,当一个值不知道需不需要呈现的时候,就可以使用可选类型。
var a = "7"
var b = Int(a)
print(b)
在上面的代码中,b的值为7,这是因为a包含这个整型的值。但是,如果你把a改成一个不能转换为Int的值的时候,b就会变成nil。比如下面:
var a = "apple"
var b = Int(a)
print(b)
如上面,“apple”是无法转换为Int的,所以b的值为nil。
除此之外,隐式解包可选类型同样可以作为非可选值,这样就不需要每次访问它们的时候都去对其进行解包。这是因为隐式可选类型被初始化之后,我们就可以认为它总是有值额,虽然这个值是可以变化的。隐式解包可选类型使用!来解包,而不是?可选类型是十分有用的一种类型,在视图和源代码之间追踪outlets的时候可以看到它们的存在,在相关的API中,也会看到其存在。更多详细关于可选类型放到这里去进一步学习。https://blog.nowcoder.net/n/f11de8b4725a4882be6dc83258221ff3
2.2.2 数组
-
数组声明
数组是一种能够追踪有序集合中所有项的值的数据类型。使用中括号[]来创建一个数组,通过在中括号中写入索引来访问数组中的元素,数组是从索引0开始的。
var myList = ["Poor","Fine","Good","Excellent"]
myList[1] = "ok"
myList
如果要创建一个空数组,可以使用初始化语法。
//Creates an empty array.
let emptyArray = [String]()
-
自动类型推断