🌓

泛型也是一个灵活而实用的机制(虽然 Java 系的泛型用的也不是很多)。教程用了很少的篇幅讲泛型,到这里我们也只能获得泛型大概的印象。其实和 Java 中的没两样。

另一个特色就是 where 关键字,这个和 SQL 的 where 很类似,可以给表达式或者方法加一层过滤器,对表达式来说只有满足 where 条件的才进行操作,对函数来说不满足 where 条件的参数会在编译时报错提示。

这是官方入门教程的最后一个篇章。到此我们对 Swift 的语法已经从头到尾进行了一次预览了。

阅读全文 »

仔细一看,Swift 的错误处理比较 Java 系来看更加细致。在 do-cathc 块中必须要用 try 关键字指定哪一个函数调用会抛错误。其他也并无两样。

对于 Error 类型对象的定义,只要实现了 Error 协议就行。其他随意。

不同之处在于 try? 语法,快速处理一个不用关注错误的场景,这种情况一般只需要知道是否有错误,有就作为 nil 处理,错误类型本身不需要关注。

另外还有一个 defer 语法可以在代码执行结束即将返回的时候做一些特殊的操作,比如初始化或者清洁操作。看上去挺像 Java 系的 finial 块,但是作用不限于 try-catch 的结束,而是整个函数的结束。

阅读全文 »

在 Swift 中称为协议,这个概念一听之下很陌生,但却是一个熟悉的概念。在 Java 中它叫接口,是面向接口编程的核心。它定义了一套规范,所有实现协议的类、枚举类型或者结构体都有相同的特征,它们属于本身类型之外还属于这个协议的子类型。但是如果使用协议作为一个变量的类型,并且将一个实现了该协议的对象赋值给它,虽然在运行时它的类型是协议的子类型,但在编译时会将其作为协议类型对待,这意味着你不能使用非协议定义的属性和方法。

扩展是一个很灵活的机制,在 Java 中没看到对应的实现,除非使用反射机制吧。

扩展允许在声明一个类型之后对该类型进行扩展,比较类似的可能是其他语言的 Mixin 机制了吧。不仅是自己声明的类型,外来引入的库或者框架的类型都是可以扩展的。

阅读全文 »

Swift 中的枚举类型看上去颇为强大。有点让我对枚举类型产生类改观。

Swift 的枚举类型有三种属性,一个 case 值;每个 case 还可以拥有一个原始值,这个值在所有实例中是相同的;每个 case 还可以定义关联值,关联值在创建 case 实例的时候定义,每个实例是不一样的。枚举类型可以有方法。

结构体和类非常类似,同样有属性有方法,还有初始化器,与类相比最大的不同在于结构体的传递是复制,而类是引用。在 Java 或者 JS 中,一个对象传递给另一个方法之后,对原始对象进行操作还是会反应到全局上,其原因是变量只定位到对象到引用,而结构体不同,变量与对象直接绑定,变量传递的也是复制后的新对象,传递前后的对象互为独立的个体,不会相互影响。

结构体和类可以轻易区分使用场景。但是枚举类型也可以有方法,这样看上去它和类也很相似,除了它不能拥有属性之外。

阅读全文 »

Swift 中创建一个类、创建一个对象、访问对象的属性等操作和一般的 OOP 语言并无两样。

相对特殊一点的是,Java 中的构造器在 Swift 是初始化器,并且还有一个卸载器与之对应,用 initdeinit 表示。

另外特殊的一点是,Swift 的类中所有声明的变量都需要赋值,无论是声明时赋值或者初始化器中赋值。继承关系通过类名后接冒号接父类名,对父类方法的覆盖需要显式的 override 前缀,如果复写的方法在父类中不存在,编译时会报错。

阅读全文 »

函数都明白,但是闭包是什么?其实就是匿名函数。

闭包实际上指的是一块封闭的作用域,里面有一串代码,外面影响不到里面。

而函数是闭包的一种形态,就是有名字的闭包。如果不给名字,就是匿名函数,匿名的闭包。通常同时说函数和闭包时,应该是在说一般函数和匿名函数。

在 Swift 中,闭包是头等类型的(first-class),可以作为参数接收,也可以作为返回值返回。

阅读全文 »

不同于其他语言,条件判断部分不需要括号。代码块依然需要大括号包围。

用 if-let 的方式可以快速的处理可能为 nil 的可选变量。还可以使用三元表达式简化版 ?? 操作符在变量不存在的情况下赋予默认值。

switch 条件匹配某个 case 之后将直接跳出,不需要其他语言中的 break 关键字。case 的匹配条件不仅限于比较,还可以使用布尔表达式。

for-in 可以方便遍历字典等类型,while 可以重复代码块。

当需要范围内重复,可以使用 for-in 配合 ..<... 操作符定义一个区间,前者不包括右边,后者则包括。

阅读全文 »

从需求来看 MongoDB,了解能满足我们需求的最简用法。

这篇文章介绍如何在 Python 中操作 MongoDB,面向初学者。我们使用 MongoDB 来储存一个网站的数据,去满足搭建一个博客网站可能会遇到的需求,以此为例来熟悉和了解 MongoDB。

以下是这篇文章讨论的内容:

  • 设计符合需求的数据结构
  • document 的增删改查
阅读全文 »