Swift语法 Swift5 【01 - 基础语法】


  • 作者: Liwx
  • 邮箱: 1032282633@qq.com
  • 源码: 需要源码的同学, 可以在评论区留下您的邮箱

iOS Swift 语法 底层原理内存管理分析 专题:【iOS Swift5语法】

00 - 汇编
01 - 基础语法
02 - 流程控制
03 - 函数
04 - 枚举
05 - 可选项
06 - 结构体和类
07 - 闭包
08 - 属性
09 - 方法
10 - 下标
11 - 继承
12 - 初始化器init
13 - 可选项


目录

  • 00-Playground
    • 01-Playground简单使用
    • 02-新建子Playground Page
  • 01-HelloWorld
  • 02-UIView
  • 03-UIImageView
  • 04-UITableViewController
  • 05-注释
  • 06-Markup
  • 07-常量
  • 08-标识符
  • 09-常见数据类型
  • 10-字面量
  • 11-类型转换
  • 12-元组(Tuple)

00-Playground

Playground是 Apple 在 2014 年 WWDC 发布 Swift 的时候,和 Xcode 一起发布的用于实时调试 Swift 代码的小工具。
本专题中【iOS Swift5语法】的大部分代码都通过 Playground 来演示,它可以实时的为我们编译代码,并自动的显示每一行代码的结果,他能演示很多代码场景。Playground是我们学习 Swift 一个必不可少的的利器。
【iOS Swift5语法】 专题使用的Xcode版本已更新至Xcode最新版本Xcode 11.4.1


01-Playground简单使用


  • Playground快捷键

    • 显示侧边栏: Command + 1
    • 隐藏侧边栏: Command + 0
    • Playground可以快速预览代码效果,是学习语法的好帮手
    • Command + Shift + Enter :运行整个Playground
    • Shift + Enter :运行截止到某一行代码
  • 新建Playground
    运行Xcode, 选中顶部菜单File -> New -> Playground ...

image.png
image.png
image.png
image.png

02-新建子Playground Page

  • 新建子Playground Page

    • 选中PlaygroundTest,右键选择New Playground Page

      image.png

    • 重命名子Playground Page为01-HelloWorld

image.png

  • Playground文件目录说明
image.png

01-HelloWorld

  • 不用编写main函数, Swift将全局范围内的首句可执行代码作为程序入口
  • 一句代码尾部可以省略分号(;) ,多句代码写到同一行时必须用分号(;)隔开
  • var定义变量let定义常量,编译器能自动推断出变量\常量的类型
print("Hello World!")
let a = 10
let b = 20
var c = a + b
c += 30

02-UIView

  • 使用UIKit框架需要导入UIKit框架, import UIKit

  • PlaygroundSupport框架支持实时预览UI效果,需要实时预览UI效果需导入PlaygroundSupport框架,import PlaygroundSupport

import UIKit
import PlaygroundSupport

let view = UIView()
view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
view.backgroundColor = .blue
PlaygroundPage.current.liveView = view
image.png

03-UIImageView

  • 导入图片资源文件Logo.png

拖拽图片文件到Resources文件夹下

image.png

import UIKit
import PlaygroundSupport

let imageView = UIImageView(image: UIImage(named: "Logo"))
PlaygroundPage.current.liveView = imageView
image.png

04-UITableViewController

import UIKit
import PlaygroundSupport

let vc = UITableViewController()
vc.view.backgroundColor = .lightGray
// TODO: live设置为vc就可以了
PlaygroundPage.current.liveView = vc
image.png

05-注释

  • 单行注释
// 单行注释
  • 多行注释
/*
 多行注释
 */
  • 多行注释嵌套
/*
 1
 /* 多行注释的嵌套 */
 2
 */

06-Markup

  • Playground的注释支持markup语法(与markdown相似)
  • 开启markup渲染效果: Editor -> Show Rendered Markup
  • 关闭markup渲染效果: Editor -> Show Raw Markup
  • 注意: Markup只在Playground中有效
//: 开始markup

/*:
 开始markup
 */

/*:
 # 一级标题
 
 ## 无序列表
 - First Item
 - Second Item
 
 ## 有序列表
 1. First Item
 2. Second Item
 
 ## 笔记
 > This is a note.
 ---
 
 ## 图片
 ![Logo](Logo.png "Local image")
 
 ## 链接
 * [博客](https://www.jianshu.com/u/bfcdf4a76abf)
 
 ## 粗体/斜体
 这是**Bold**, 这是*Italic*
 
 */
image.png
image.png

07-常量

常量即在初始化赋值之后,就不允许在进行赋值

let age1 = 10
//age1 = 22       // 报错: Cannot assign to value: 'age1' is a 'let' constant

let age2: Int
age2 = 20

func getAge() -> Int {
    return 30
}
let age3 = getAge()
  • 常量、变量在未初始化之前不能使用
let age: Int
var height: Int
print(age)      // error: constant 'age' used before being initialized
print(height)   // error: variable 'height' used before being initialized
  • 声明常量后再单独赋值,必须指定类型
let age
age = 20    // error: found an unexpected second identifier in constant declaration; is there an accidental break?

08-标识符

  • 标识符(比如 常量名、变量名、函数名)几乎可以使用任何字符
  • 标识符不能以数字开头, 不能包含空白字符制表符箭头特殊字符
func 🐂🍺() {
    print("666")
}
🐂🍺()

let 👽 = "ET"
var 🥛 = "milk"

09-常见数据类型

常用数据类型分为两大类: 值类型引用类型

  • 值类型

    • 枚举(enum)
      • Optional
    • 结构体(struct)
      • Bool、Int、Float、Double、Character
      • String、Array、Dictionary、Set
  • 引用类型(reference type)

    • 类(class)

  • 整数类型: Int8、Int16、 Int32、 Int64、 UInt8、 UInt16、 UInt32、 UInt64
  • 32bit平台, Int等价于Int32 ;在64bit平台,Int等价于Int64
  • 整数的最值表示方式: UInt8. max、Int16.min
  • 一般情况下,都是直接使用Int即可
  • 浮点类型:Float , 32位,精度只有6位, Double , 64位,精度至少15位

10-字面量

// 布尔
let bool = true             // 取反是false
// 字符串
let string = "哈哈哈"
// 字符(可存储ASCII字符、Unicode字符)
let character: Character = "🐂"
// 整数
let intDecimal = 17         // 十进制
let intBinary = 0b10001     // 二进制
let intOctal = 0o21         // 八进制
let intHexadecimal = 0x11   // 十六进制
  • 整数和浮点数可以添加额外的零或者添加下划线来增强可读性

100_0000、1_000_000.000_000_1、000123.456

// 浮点数
let doubleDecimal = 125.0   // 十进制,等价于1.25e2, 0.0125等价于1.25e-2
let doubleHexadecimal1 = 0xFp2  // 十六进制,意味着15x2^2, 相当于十进制60.0
let doubleHexadecimal2 = 0xFp-2 // 十六进制, 意味着15x2^-2, 相当于十进制的3.75
/* 以下都是表示12.1875
 十进制: 12.1875、1.21875e1
 十六进制: 0xC.3p0
 */

// 数组
let array = [1, 3, 5, 7, 9]
// 字典
// value值有整型,字符串类型,需指定类型为[String : Any], 否则报错Heterogeneous collection literal could only be inferred to '[String : Any]'; add explicit type annotation if this is intentional
let dictionary: [String : Any] = ["age" : 18, "height" : 168, "weight": 120, "name" : "Liwx"]

11-类型转换

注意: Swift不支持不同类型的值进行运算

// 整数类型
let int1: UInt16 = 2_000
let int2: UInt8 = 1
let int3 = int1 + UInt16(int2)

// 整数、浮点数转换
let int = 3
let double = 0.14159
let pi = Double(int) + double
let intPi = Int(pi)

// 字面量可以直接相加,因为数字字面量本身没有明确的类型
let result = 3 + 0.14159

12-元组(Tuple)

元组(Tuple)可以把多个值组合成一个复合值。元组内的值可以是任意类型,且不要求是相同类型。

  • 不想接收值,直接用下划线_
  • 可以使用标签方式
// 元组
let http404Error = (404, "Not Found")
print("The status code is \(http404Error.0), status message is \(http404Error.1)")

let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode), status message is \(statusMessage)")

// 不想接收值,直接用下划线_
let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")

// 使用标签方式
let http200Status = (statusCode: 200, description: "OK")
print("The status code is \(http200Status.statusCode), description is \(http200Status.description)")

iOS Swift 语法 底层原理内存管理分析 专题:【iOS Swift5语法】

下一篇: 02 - 流程控制
上一篇: 00 - 汇编


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343