`
文章列表
《从零开始学Swift》学习笔记(Day 56)——命名规范 原创文章,欢迎转载。转载请注明:关东升的博客    程序代码中到处都是自己定义的名字,取一个有样并且符合规范的名字非常重要。 命名方法很多,但是比较有名的,广泛接受命名法有: 匈牙利命名,一般只是命名变量,原则是:变量名=类型前缀+描述,如bFoo表示布尔类型变量,pFoo表示指针类型变量。匈牙利命名还是有一定争议的,在Swift编码规范中几本不采用匈牙利命名。 驼峰命名(Camel-Case),又称骆驼命名法,是指混合使用大小写字母来名字。驼峰命名又分为:小驼峰法和大驼峰法。           a)小驼峰法是 ...
原创文章,欢迎转载。转载请注明:关东升的博客   在使用try进行错误处理的时候,经常会看到try后面跟有问号(?)或感叹号(!),他们有什么区别呢? 1.使用try? try?会将错误转换为可选值,当调用try?+函数或方法语句时候,如果函数或方法抛出错误,程序不会发崩溃,而返回一个nil,如果没有抛出错误则返回可选值。 示例代码如下: //查询所有数据方法
  原创文章,欢迎转载。转载请注明:关东升的博客   能放到try后面调用函数或方法都是有要求的,他们是有可能抛出错误,在这些函数或方法声明的参数后面要加上throws关键字,表示这个函数或方法可以抛出错误。 声明 ...
原创文章,欢迎转载。转载请注明:关东升的博客   Swift 1.x的错误处理模式存在很多弊端,例如:为了在编程时候省事,给error参数传递一个nil,或者方法调用完成后不去判断error是否为nil,不进行错误处理。 let contents = NSString(contentsOfFile: filePath, Êencoding: NSUTF8StringEncoding, error: nil)//error参数传递一个nil  
  原创文章,欢迎转载。转载请注明:关东升的博客   Swift错误处理模式,在Swift 1.x和Swift 2.0是不同的两种模式。 Swift 1.x代码错误处理模式采用Cocoa框架错误处理模式,到现在Objective-C还沿用这种处理模式,而Swift 2.0之后采用了do-try-catch错误处理模式。 下面的示例代码是从文件中读取字符串到内存中,如果使用Swift 1.x错误处理模式代码如下: import Foundation var err: NSError? //定义可选的NSError?变量 let contents = N ...
原创文章,欢迎转载。转载请注明:关东升的博客   扩展类型的时候,也可以添加新的构造函数。值类型与引用类型扩展有所区别。值类型包括了除类以外的其他类型,主要是枚举类型和结构体类型。   值类型扩展构造函数 扩展结构体类型中定义构造函数的示例: struct Rectangle { var width : Double var height : Double init(width : Double, height : Double) { self.width = width ...
原创文章,欢迎转载。转载请注明:关东升的博客   可以在原始类型上扩展计算属性,包括实例计算属性和静态计算属性。添加计算属性的定义,与普通的计算属性的定义是一样的。 实例计算属性示例:在网络编程时,为了减少流量,从服务器端返回的不是信息描述,而是编码,然后在本地再将编码转换为描述信息。为此定义了如下Int类型扩展: extension Int { //定义Int类型的扩展 var errorMessage : String { //只读计算属性 var errorStr = "" swit ...
原创文章,欢迎转载。转载请注明:关东升的博客  声明扩展的语法格式如下:  extension 类型名 {          //添加新功能  }  声明扩展的关键字是extension,“类型名”是Swift中已有的类型,包括类、结构体和枚举,但是我们仍然可以扩展整型、浮点型、布尔型、字符串等基本数据类型,这是因为这些类型本质上也是结构体类型。打开Int的定义如下:  struct Int : SignedInteg
Swift 2.0学习笔记(Day48)——原创文章,欢迎转载。转载请注明:关东升的博客   继承会发生在子类和父类之间,是一系列类的继承关系。 例如:Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类。
原创文章,欢迎转载。转载请注明:关东升的博客   在类的定义中使用final关键字声明类、属性、方法和下标。final声明的类不能被继承,final声明的属性、方法和下标不能被重写。 下面看一个示例: final class Person { //声明为final,说明它是不能被继承的 var name: String final var age: Int //定义的age属性 final func description() -> String { //定义description实例方法 r ...
原创文章,欢迎转载。转载请注明:关东升的博客   下标是一种特殊属性。子类属性重写是重写属性的getter和setter访问器,对下标的重写也是重写下标的getter和setter访问器。 下面看一个示例: c lass DoubleDimensionalArray { let rows: Int, columns: Int var grid: [Int] init(rows: Int, columns: Int) { self.rows = rows self.columns = colum ...
文章,欢迎转载。转载请注明:关东升的博客   重写实例方法 在子类中重写从父类继承来的实例方法和静态方法。先介绍实例方法的重写。 下面看一个示例: class Person { var name: String var age: Int func descript ...
原创文章,欢迎转载。转载请注明:关东升的博客 重写实例属性 我们可以在子类中重写从父类继承来的属性,属性有实例属性和静态属性之分,他们在具体实现也是不同的。 实例属性的重写一方面可以重写getter和setter访问器,另一方面可以重写属性观察者。 计算静态属性需要使用getter和setter访问器,而存储属性不需要。子类在继承父类后,也可以通过getter和setter访问器重写父类的存储属性和计算属性。 下面看一个示例: class Person { var name: String //存储属性 var age: Int ...
原创文章,欢迎转载。转载请注明:关东升的博客  Swift中的子类构造函数的来源有两种:自己编写和从父类继承。并不是父类的所有的构造函数都能继承下来,能够从父类继承下来的构造函数是有条件的,如下所示。  条件1:如果子类没有定义任何指定构造函数,它将自动继承所有父类的指定构造函数。 条件2:如果子类提供了所有父类指定构造函数的实现,无论是通过条件1继承过来的,还是通过自己编写实现的,它都将自动继承所有父类的便利构造函数。  下面看示例代码:  class
  原创文章,欢迎转载。转载请注明:关东升的博客  在构造函数中可以使用构造函数代理帮助完成部分构造工作。类构造函数代理分为横向代理和向上代理,横向代理只能在发生在同一类内部,这种构造函数称为便利构造函数。向上代理发生在继承的情况下,在子类构造过程中,要先调用父类构造函数初始化父类的存储属性,这种构造函数称为指定构造函数。  构造函数调用规则 Person和Student类示例: class Person { var name: String var age: Int func description() -> String { ...
Global site tag (gtag.js) - Google Analytics