«

ios教程-第一课

时间:2026-6-6 13:06     作者:john     分类: 技术实现


学习的方法

步骤上的方法:
看+实践题目操作+分享(将学到的再社交媒体分享出去)。

时间上的方法:
连续学习,不要中断式学习(三天打鱼两天晒网,隔几天就把之前学的都忘记了,增加了返工的成本)。

playground

新建xcode的时候有类型叫playground,他是一种沙箱环境,就是用来学习swift语言实时看效果用的。

import Cocoa // 引入库,估计print就是这里面的(但我发现删掉cocoa也能print)
var greeting = "Hello, playground" // 声明变量。
print("hello world" + greeting) // 打印

基本语法

var声明的是变量。一旦声明后,这个变量类型就确定了,不能像js一样后期再赋值别的类型(所以他有点像TS)。
let声明的是常量,不能改。

分号可以有可以没有,像js一样。

类型原则

// 当你调用它时:
print("a", "b", "c", separator: "-")


// 之所以能写abc然后让他收集到items里面,就是因为后面第二个参数separator人家要求外部必须传递参数名,于是外部调用的时候编译器肯定能把abc收集到items里面

### 字符串与类型

var a = "abcd"。 分号必须用双引号。

属性:a.count获取长度。
方法:

* a.upperCased()转大写。
* hasSuffix是否以xxx结尾。

字符串的拼接:"hello" + a

字符串的转换:String(a)

字符串插值:\( ) 的方式,它不仅可以放变量,甚至可以在里面写简单的表达式,比如 print("结果是: \(1 + 1)")。 类似js的`helo ${a}`

多行字符串:
```js
let movie = """
A day in
the life of an
Apple engineer
"""

数字

let number = 120
print(number.isMultiple(of: 3))

这就是数字整型所带的方法。判断一个数是另外一个数的多少倍。

面向对象

Swift 官方的至高设计哲学: 能用 struct 就绝不用 class。你在 iOS 开发里见到的基础类型(Int, String, Array, Dictionary)全都是 struct。只有当你确实需要“继承”或者需要“多个地方共享同一个指针实例”时,才用 class。
class能干的,struct都能干。

protocol。它在语法地位上等同于 Java 的 interface。
它自己不能被实例化(你不能 let p = MyProtocol()),它只负责列出一张“清单”,规定遵守它的人必须长什么样:

抽象类。
如果一个抽象类里没有任何具体声明的实现那他就是纯抽象类(Pure Abstract Class)”,纯抽象类其实跟接口功能一样了。只是类和接口在概念上是俩不同的功能概念,类主要讲究我是谁,接口主要讲究我要实现什么。
Swift 彻底取消了 abstract class(抽象类)的概念,那如果我想写一个“半成品”,既有规矩,又有默认实现的保底方案,该怎么办?
传统语言靠抽象类,而 Swift 靠“协议扩展(Protocol Extension)”。
正因为“全空抽象类”和“接口”在历史上的这种重叠引发了无数新手的混乱,更年轻的现代语言在设计时直接出手整顿了:
C++(老大哥): “我早就看穿了。所以我压根没设计 interface 关键字。在 C++ 里,你想用接口,直接写一个全空虚函数的 class 就行了,反正 C++ 支持多继承,没这顾虑!”
Swift(新一代): “我觉得‘抽象类’这个概念太别扭了,容易引导人写出臃肿的继承树。所以我直接把抽象类干掉了!在 Swift 里,你要定纯规范就用 protocol(接口),你要加默认实现就用 protocol + extension,彻底跟单继承的 class 划清界限!”

子类能不能不实现父类的东西:

  1. 父类如果有默认实现则可以不实现。例如java里default实现以及swift里extends语法给protocol接口增加方法实现。
  2. 如果父类或接口只有声明,但没有具体实现,那么子类通常来说必须得实现。但是如果你正在写的也是个抽象类,那么你就可以继续不实现咯。

多重继承:
Swift 的 class 严格限制单继承,而 struct 压根不支持类继承。
所以,Swift 里的“多重继承”,实际上指的是“一个 struct 拥有同时遵守多个协议(接口)的能力”。这也就是现代软件工程里大名鼎鼎的“多实现”。