重学Swift(一)漫谈一些基础

0.Swift语言背景的介绍

  • 历史6年(2014年6月发布),Swift从1.x发展到5.x,经历了多次重大改变,ABI终于稳定
  • ABI(Application Binary Interface):应用二进制接口,应用程序和操作系统之间的底层接口,涉及到:
    • 1.目标的文件格式
    • 2.数据类型的大小,布局,对齐
    • 3.函数的调用约定等等
  • ABI稳定以后,语法不会有太大变动
  • Swift是用C++编写的

1. playground 使用

关于playground的创建和使用这里不赘述了,百谷一堆(😁百度和谷歌一查一堆一堆的),它的优点就是可以试试预览一些结果,比如输入 a+b,他就能反映出a+b的结果,也可以预览一些视图的比如背景色之类的

1.1 常用快捷键

  • cmd + shift + enter 运行整个prayground
  • shift + enter 运行到某行及之前的代码

1.2 视图预览

  • 如果需要预览视图,需要import PlaygroundSupport,然后将要显示的view赋值给以下代码
    • PlaygroundPage.current.liveView = view
    • 如果不显示预览视图,可以试试cmd+option+enter
  • 添加图片资源,cmd+1,展开左边的文件夹目录,将资源拖拽到Resource中,则可以引用图片资源
  • Source文件夹是存放代码文件的
  • 同样也可以创建控制器,不赘述了,详细看demo

1.3 多page介绍

  • Xcode菜单栏 File -> New -> Playground Page 或者 快捷键option+cmd+n
  • 新建的page可以自由修改名字,可以拖动位置,每个page包含单独的SourceResource,在每个page每部的文件夹内的资源是只有当前page可以使用,项目的SourceResource是所有的page都共享的
    5.多page.png

1.4 Markdown语法支持

playground 可以与注释配合生成对Markdown语法的渲染,这里不过多赘述Markdown的语法,百谷一堆。

  • 单行行注释的Marksown://:双反斜杠加冒号,斜杠和冒号之间不能有空格,后面跟单行的Markdow语句
//:# 这是Markdown的一级标题
  • 多行注释注释的Marksown:/*: 这里写Markdown语句 */
/*: 
 # 这是Markdown的一级标题
 ## 这是Markdown的二级标题
 ### 这是Markdown的三级标题
 */
  • 同一个playground下的多个page的跳转 @next@previous

    • //: [下一页](@next)自动跳转到当前page的下一个page,并显示为下一页,如果当前page没有下一页的话,则点击无效
    • //: [上一页](@previous)自动跳转到当前page的上一个page,并显示为上一页,如果当前page没有上一页的话,则点击无效
  • Markdown语法编写完毕之后通过Xcode -> Editor -> Show Rendered Markup

2.简单入门

这一节中我们只是泛泛的简单的演示一些操作,对于有编程基础一看就能懂的东西,不做过多赘述

2.1 我们先创建一个命令行项目,大致观察一下项目结构

1.commandLine 项目图
    // 导包
    import Foundation
    // 打印
    print("Hello, World!")
  • 项目很简单:
    • 仅包含一个main文件,
    • main文件中并没有我们熟悉的main函数,
    • 实现Hello, World!只需要一行代码,更简单甚至可以去掉导包
    • Swift项目的文件的后缀名为.swift,和OC项目不同的是,不再区分声明.h和实现.m
    • 一句代码尾部可以省略分号,多句代码如果在同一一行,必须用分号隔开

2.2 简单了解print

  • 基本打印,在print函数里直接书输入变量名字
  • 字符拼接,只需要在字符串中使用\(变量名)进行包裹即可
    4.基本打印.png

2.3 简单了解变量和常量

  • 常量
    • let声明不可以重复赋值,重复赋值会报错
      2.变量常量报错图.png
    • 常量不要求在编译期就明确赋值,但是只能赋值1次
    • 未标明类型的常量,或者不能通过自动推断出变量类型的,必须在声明时赋值


      6.常量报错图
  • 变量用var声明,可以重复赋值,
  • 变量或者常量不需要声明类型,编译器通过自动推断出类型


    3.自动推断.png

3.Swift数据类型

与OC不同的是,Swift的数据类型大致分类两种,或者三种,按照两种划分

  • 值类型 - enum + struct
  • 引用类型 - class

按照三种划分,可以将enum 和 struct 各自作为一类。enum 这个不足赘述了,后续会详细展开,struct类型的范围是与OC最大的不同,其中Bool Int Float Double Character 以及String Array Dictionary Set都是用struct实现的


7.数据类型

3.1 简单介绍数据类型

整形

  • 整形类型: Int8,Int16,Int32,Int64,UInt8,UInt16,UInt32,UInt64
  • 在32位系统,Int等价于Int32,64位系统等价于Int64

浮点型:

  • Float 32位,精度6位,

  • Double 64位,精度至少15位

  • 浮点型定义变量时默认为Double,如果是用Float类型时,要显式标注

    // 浮点型
    let double = 15.0 // Double 类型
    let float:Float = 10.0 //Float 类型
    

布尔类型

  • 在OC中 0,1,YES,NO,true,flase都可以作为布尔类型的赋值,但是在Swift中只能是true false,不接受其他值

字符和字符串

  • 字符和字符串都是使用双引号,再不加类型标注的时候默认是字符串,如果是定义字符需要显式的标注

    // 字符 和 字符串
    let string = "字符串"
    let character:Character = "😁"
    

3.2 类型转换

  • Swift在进行数值计算时,不会进行类型自动转换,比如我们以前在OC中一个浮点型 加上 一个整形数据,然后结果会看做浮点型,相当于是自动转换为优先级高的类型,但是在Swift中不允许这样进行计算,要求进行计算的结果变量类型一定是一致的,否则就会报错


    8.类型转换.png
  • Swift类型强转,格式为类型(要转换的值),下面的例子是将Float转换为Double,通过这个例子也能看出,同是浮点类型的数据,也不能直接计算

    // 浮点型
    let double = 15.0 // Double 类型
    let float:Float = 10.0 //Float 类型
    let value = double + Double(float)
    
  • 这里有个例外就是如果字面量直接向加减是不会报错的,因为没有明确的表明类型,最后系统会根据数值进行推断的

    let value = 1 + 0.5
    

4.元组

概念不多介绍了,百谷一堆。介绍几种赋值和定义的方式

// 元组
// 1.基本定义
let tuple = (0,"我是字符串",true)
// 2.根据每个元素名字定义
let (intValue,stringValue,boolValue) = (0,"我是字符串",true)
intValue
stringValue
boolValue
// 3.第二种也可以省略其中不需要取值元素
let (_,stringValue1,boolValue1) = (1,"我是字符串2",true)
// 4.也可以在实现的时候声明元素名字

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