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


  • 作者: Liwx
  • 邮箱: [email protected]
  • 源码: 需要源码的同学, 可以在评论区留下您的邮箱

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 - 汇编


你可能感兴趣的:(Swift语法 Swift5 【01 - 基础语法】)