读书笔记-Swift-01Swift概述

开始

  • 典型的语句如下:
print("hello")
print("world")
  • 一行就是一个语句,换行是有意义的。
  • 也可以一行写多个语句,不过要用分号分开。
  • 也可以在每行后面写个分号,不过没什么用,可以兼容C/OC的语言习惯
  • 一个语句可以拆分成多行,用于防止一行太长。但是要在一个合理的地方断。比如括号的地方就是个好地方。
print(
      "world")
  • 双反斜杠(//)表示注释一行。和C、OC一样。
  • (/* ... */) 可以注释一段
  • 大括号一般会换行对齐。但是也有写在一行的。语法上都可以。方便的话也可以写在一行。
  • swift是编译型语言。必须先编译成机器语言。
  • swift编译器非常严格。编译器给的警告也应该重视。
  • swift给出的错误和警告,有的很重名,有的很垃圾(误导)。有时候给的错误提示不在真正发生错误的地方。所以有个办法就是把语句拆分成多行。这样更容易定位哪行出错了。

所有的东西都是对象?

  • swift中任何东西都是对象。粗略的规定,一个对象就是你可以对它发消息的东西。消息,就是一种必要的指令。这样理解的话,任何东西都是对象。
  • swift中,发消息的语法是“点”(dot-notation)
fido.bark()
rover.sit()
  • 任何东西的意思就是说,语言原始的实体都能被发送消息。1看上去是基本数据类型,也是个对象,可以发消息,下面的是合法的。
let s = 1.description
  • 在swift中,最终检测一个东西是不是对象的方法,就是看你是否能改变它。对象类型可以被扩展,意味着你可以对这个类型定义自己的方法。swift中的类型是可以扩展的。
  • 所以swift中没有标量。所有的类型都是对象类型。

三种常用的对象类型

  • swift有三种常用的对象类型。classes,cstucts,enums
  • 三种类型的相似远大于不同
  • struct,enum在oc和swift中是不同的。

变量

  • 变量就是对象的名字。你可以想象成放对象的鞋盒子。对象可能被更改,被替换,但是变量名是不会变的。
  • 变量需要先被声明。let 申明常量。var声明变量。声明常常伴随着初始化。
  • 虽然说var显得灵活,但是知道不可改的时候,最好用let。首先能提高效率。
  • 变量有类型,类型在声明的时候确定,不可修改。
  • 变量有生命周期。
  • 变量的类型约定大写字母开头。变量用小写字母开头。

函数

  • 可执行语句不是在任何地方都可以执行的。要在函数体里执行。函数就是一堆可执行语句。函数的调用又是一个执行语句,这样又必须在某个地方调用。不用担心最开始的函数是谁在调用,你在写iOS的APP,系统就会有地方调用。
  • 函数有名字,在定义时确定。
  • swift有特别的规则,有个main.swift的文件,可以在最顶层执行。不在任何函数体里。可以用这个main文件,通常没必要。

swift文件结构

  • swift中,文件是一个完整意义的单位。只有特定的东西才能在文件中。
    • 模块导入语句
    • 变量声明
    • 函数声明
    • 对象类型声明
  • 模块是更上一层的单元。模块可以包含很多文件,他们可以互相调用。但是如果不导入的话,是不能互相看见的。
  • 文件层级的变量声明是全局变量。在文件级别的函数声明是全局函数。
  • 文件级别里不能直接放可执行代码。
  • 可执行代码也不能放在类声明的大括号内。这是类声明的顶层。类声明可以包含函数声明。函数声明可包含可执行代码。

作用域和生命周期

  • 作用域是说这个东西可以被别人看到。嵌套在别的东西里面的东西,也是嵌套继承作用域。可以看到自己的同级别和上一级别的东西。
  • 模块范围是个作用域。文件范围是一个作用域。大括号是个作用域。
  • 作用域是共享信息的重要方式。
  • 东西都有生命周期。和作用域完全一致。声明周期在作用域内。
  • 变量声明,函数声明,函数对象声明可以在任何大括号内。

对象成员

  • 在对象类型中,(class,struct,enum)在顶层定义的东西有特殊的名字。大部分因为历史原因。变量称之为属性;函数称之为方法。
  • 所有顶层中的,称之为对象的成员。成员都有特殊的签名。

命名空间

  • 命名空间内部的东西不能被命名空间外部的东西直接访问。除非明确指出命名空间的名字。这样可以让同样的名字在不同的地方使用,而不会有冲突。
  • 命名空间本身不提供安全和隐私,只是提供方便。
  • 使用(.)点的方式来引用命名空间,其实和发消息是一个机制。发消息允许你看一个其他你不能看到的作用域。

模块

  • 顶级的命名空间是模块。默认情况下,你的app是个模块因此也是个命名空间。
  • frameworks也是模块,因此也是命名空间。
  • 引入模块的时候,所有模块中的顶级声明都可以看到。
  • 不要在自己的模块中定义和系统冲突的类。干不过他。
  • swift自己也是在模块中定义的。称之为swift模块。通常隐含的导入了swift模块。像print这样的函数就是在这个模块中。
  • swift模块顶级中包含了全局函数,操作符比如+,内置类型比如Int,内置结构比如String。

实例

  • 对象类型有一个重要特性,可以被实例化。类定义只是说这类是什么样子,要有具体的对象,要造一个。
  • 创建实例就类型加括号即可。
  • 方法分为实例方法和类方法。属性也有类属性和实例属性。

为什么有实例

  • 对象类型本身是个对象。可以对他发消息。
  • 实例是类描述的反映,也是存储的空间。
  • 实例不仅仅关乎属性的值,也关乎属性的生命周期。
  • 实例是数据和代码的集合。代码是从类的定义中来。数据是单独的。

self

  • 实例是一个对象,是消息的接收者。因此需要有个办法对自己发消息。于是就有了self。
  • self就代表本身这个对象。可以省略写self。但是为了可读性,一般不会省略。而且有的时候你必须写self。

隐私

  • 命名空间不是访问内部名字无敌的限制。但有些时候我们需要做些限制。

  • 好的面向对象的设计需要有隐私设计。需要有办法让别的类无法访问无法看见不支持被看见的类的方法和属性。

  • 声明为private的就可以。

  • 一些保留字,private,class等,不能简单的作为变量的命名。要强制的话,需要加反点引号引起来。

    class `func` {
        func `if`(){
          let `class` = 1
      }
    }
    
  • 对象的属性和方法默认都是公有的。要搞成私有,用private

设计

  • 面向对象程序设计是一门艺术
  • 实际的开发过程中,很多类的设计都是Apple的。你不用去设计,只需要学习怎么用。
  • 面向对象的设计必须建立在靠谱的自然对象基础上。然后是封装合适的方法和数据。运行的时候实例化,有合适的生命周期,恰当的暴露。

对象类型和API

  • 程序常常有很少的全局函数和变量等。大部分是对象类型的定义,类定义之类的。这样更好的组织你的代码。
  • 小结下对象:
    • 封装功能;
    • 维护数据
  • 类可以做什么,用API封装。

实例创建,范围和生命周期

  • swift中运行的通常是实例。要做事情先要对类进行实例化。默认情况下是没有实例的。需要自己造。造完之后放到一个变量中,生命周期和作用域都和这个变量一致。
  • 实际的开发过程中,app有一些框架,启动的时候就有一些实例。

小结和结论

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

推荐阅读更多精彩内容