继承(Inheritance) 发布时间: 2021-07-29 03:05:21 评论数: 0
本页包含内容:定义一个基类(Base class)子类生成(Subclassing)重写(Overriding)防止重写一个类可以继承(inherit)另一个类的方法(methods),属性(property)和其它特性。当一个类继承其它类时,继承类叫子类(subclass),被继承类叫超类(或父类,superclass)。在 Swift 中,继承是区分「类」与其它类型的一个基本特征。在 Swift 中,类可以调用和访问超类的方法,属性和下标脚本(subscripts),并且可以重写(override)这些方法,属性和下标脚本来优化或修改它们的行为。Swift 会检查你的重写定 ......
@UIApplicationMain 发布时间: 2021-07-26 14:28:54 评论数: 0
因为 Cocoa 开发环境已经在新建一个项目时帮助我们进行很多配置,这导致了不少刚接触 iOS 的开发者都存在基础比较薄弱的问题,其中一个最显著的现象就是很多人无法说清一个 app 启动的流程。程序到底是怎么开始的,AppDelegate 到底是什么,xib 或者 storyboard 是怎么被加载到屏幕上的?这一系列的问题虽然在开发中我们不会每次都去关心和自己配置,但是如果能进行一些了解的话对于程序各个部分的职责的明确会很有帮助。在 C 系语言中,程序的入口都是 main 函数。对于一个 Objective-C 的 iOS app 项目,在新建项目时, Xcode 将帮我们准 ......
隐式解包 Optional 发布时间: 2021-07-24 04:29:41 评论数: 0
相对于普通的 Optional 值,在 Swift 中我们还有一种特殊的 Optional,在对它的成员或者方法进行访问时,编译器会帮助我们自动进行解包,这就是 ImplicitlyUnwrappedOptional。在声明的时候,我们可以通过在类型后加上一个感叹号 (!) 这个语法糖来告诉编译器我们需要一个可以隐式解包的 Optional 值:var maybeObject: MyClass!首先需要明确的是,隐式解包的 Optional 本质上与普通的 Optional 值并没有任何不同,只是我们在对这类变量的成员或方法进行访问的时候,编译器会自动为我们在后面插入解包符号 ......
初始化方法顺序 发布时间: 2021-07-21 03:24:34 评论数: 0
与 Objective-C 不同,Swift 的初始化方法需要保证类型的所有属性都被初始化。所以初始化方法的调用顺序就很有讲究。在某个类的子类中,初始化方法里语句的顺序并不是随意的,我们需要保证在当前子类实例的成员初始化完成后才能调用父类的初始化方法:class Cat { var name: String init() { name = "cat" } } class Tiger: Cat { let power: Int override init() { power = 10 sup ......
多重 Optional 发布时间: 2021-07-18 21:25:14 评论数: 0
Optional 可以说是 Swift 的一大特色,它完全解决了 “有” 和 “无” 这两个困扰了 Objective-C 许久的哲学概念,也使得代码安全性得到了很大的增加。但是一个陷阱 -- 或者说一个很容易让人迷惑的概念 -- 也随之而来,那就是多重的 Optional。在深入讨论之前,可以让我们先看看 Optional 是什么。很多读者应该已经知道,我们使用的类型后加上 ? 的语法只不过是 Optional 类型的语法糖,而实际上这个类型是一个 enum:enum Optional<T> : _Reflectable, NilLiteralConvertibl ......
接口和类方法中的 Self 发布时间: 2021-07-16 04:28:30 评论数: 0
我们在看一些接口的定义时,可能会注意到出现了首字母大写的 Self 出现在类型的位置上:protocol IntervalType { //... /// Return `rhs` clamped to `self`. The bounds of the result, even /// if it is empty, are always within the bounds of `self` func clamp(intervalToClamp: Self) -> Self //... }比如上面这个 IntervalTy ......
@autoreleasepool 发布时间: 2021-07-13 07:28:00 评论数: 0
Swift 在内存管理上使用的是自动引用计数 (ARC) 的一套方法,在 ARC 中虽然不需要手动地调用像是 retain,release 或者是 autorelease 这样的方法来管理引用计数,但是这些方法还是都会被调用的 -- 只不过是编译器在编译时在合适的地方帮我们加入了而已。其中 retain 和 release 都很直接,就是将对象的引用计数加一或者减一。但是autorelease 就比较特殊一些,它会将接受该消息的对象放到一个预先建立的自动释放池 (auto release pool) 中,并在 自动释放池收到 drain 消息时将这些对象的引用计数减一,然后将它 ......
基本运算符 发布时间: 2021-07-11 13:39:14 评论数: 0
本页包含内容:术语赋值运算符算术运算符组合赋值运算符(Compound Assignment Operators)比较运算符三目运算符(Ternary Conditional Operator)空合运算符区间运算符逻辑运算符运算符是检查、改变、合并值的特殊符号或短语。例如,加号+将两个数相加(如let i = 1 + 2)。复杂些的运算例如逻辑与运算符&&(如if enteredDoorCode && passedRetinaScan),或让 i 值加1的便捷自增运算符++i等。Swift 支持大部分标准 C 语言的运算符,且改进许多特性来减少常 ......
字面量转换 发布时间: 2021-07-08 22:57:13 评论数: 0
本文主体部分适用于 Swift 1.0。Swift 1.1 beta 2 中该部分内容发生了一些变化,附在文后。所谓字面量,就是指像特定的数字,字符串或者是布尔值这样,能够直接了当地指出自己的类型并为变量进行赋值的值。比如在下面:let aNumber = 3 let aString = "Hello" let aBool = true中的 3,Hello 以及 true 就称为字面量。在 Swift 中,Array 和 Dictionary 在使用简单的描述赋值的时候,使用的也是字面量,比如:let anArray = [1,2,3] let aDictionary = [" ......
Designated,Convenience 和 Required 发布时间: 2021-07-05 14:17:11 评论数: 0
我们在深入初始化方法之前,不妨先再想想 Swift 中的初始化想要达到一种怎样的目的。其实就是安全。在 Objective-C 中,init 方法是非常不安全的:没有人能保证 init 只被调用一次,也没有人保证在初始化方法调用以后实例的各个变量都完成初始化,甚至如果在初始化里使用属性进行设置的话,还可能会造成各种问题,虽然 Apple 也明确说明了不应该在 init 中使用属性来访问,但是这并不是编译器强制的,因此还是会有很多开发者犯这样的错误。所以 Swift 有了超级严格的初始化方法。一方面,Swift 强化了 designated 初始化方法的地位。Swift 中不加修 ......
实例方法的动态调用 发布时间: 2021-07-02 10:39:16 评论数: 0
在 Swift 中有一类很有意思的写法,可以让我们不直接使用实例来调用这个实例上的方法,而是通过类型取出这个类型的某个实例方法的签名,然后再通过传递实例来拿到实际需要调用的方法。比如我们有这样的定义:class MyClass { func method(number: Int) -> Int { return number + 1 } }想要调用 method 方法的话,最普通的使用方式是生成 MyClass 的实例,然后用 .method 来调用它:let object = MyClass() let result = object.m ......
安全的资源组织方式 发布时间: 2021-06-29 21:03:51 评论数: 0
iOS 开发中有很多使用字符串来指定某个资源的用法,比如通过项目中图片的名字来生成 UIImage 对象:let image = UIImage(name: "my_image")或者通过 segue 的标识符来调用一个 storyboard 中的 segue:performSegueWithIdentifier("my_segue", sender: self)在 Cocoa 框架中还有不少类似的用字符串来指定资源的使用方式。这类方法其实是存在隐患的,如果资源的名称发生了改变的话,你必须在代码中作出相应的改变。但是这些操作并没有编译器的保证,虽然现在我们可以在项目中进行全局查 ......
字符串和字符(Strings and Characters) 发布时间: 2021-06-26 14:21:20 评论数: 0
本页包含内容:字符串字面量初始化空字符串字符串可变性字符串是值类型使用字符计算字符数量连接字符串和字符字符串插值比较字符串字符串大小写UnicodeString是例如"hello, world","海贼王"这样的有序的Character(字符)类型的值的集合,通过String类型来表示。Swift 的String和Character类型提供了一个快速的,兼容 Unicode 的方式来处理代码中的文本信息。创建和操作字符串的语法与 C 语言中字符串操作相似,轻量并且易读。字符串连接操作只需要简单地通过+号将两个字符串相连即可。与 Swift 中其他值一样,能否更改字符串的值,取决 ......
sizeof 和 sizeofValue 发布时间: 2021-06-24 21:20:39 评论数: 0
喜欢写 C 的读者可能会经常和 sizeof 打交道,不论是分配内存,I/O 操作,还是计算数组大小的时候基本都会用到。这个在 C 中定义的运算符可以作用于类型或者某个实际的变量,并返回其在内存中的尺寸 size_t (这是和平台无关的一个整数类型)。在 Cocoa 中,我们也有一部分 API 需要涉及到类型或者实例的内存尺寸,这时候就可以使用 sizeof 来计算。一个常见的用例是在从一个数组生成 NSData 的时候需要传入数据长度。因为在 Objective-C 中 sizeof 这个 C 运算符被保留了,因此我们可以直接这么做:char bytes[] = {1, 2, ......
Lock 发布时间: 2021-06-23 07:17:54 评论数: 0
无并发,不编码。而只要一说到多线程或者并发的代码,我们可能就很难绕开对于锁的讨论。简单来说,为了在不同线程中安全地访问同一个资源,我们需要这些访问顺序进行。Cocoa 和 Objective-C 中加锁的方式有很多,但是其中在日常开发中最常用的应该是 @synchronized,这个关键字可以用来修饰一个变量,并为其自动加上和解除互斥锁。这样,可以保证变量在作用范围内不会被其他线程改变。举个例子,如果我们有一个方法接受参数,需要这个方法是线程安全的话,就需要在参数上加锁:- (void)myMethod:(id)anObj { @synchronized(anObj) ......
Swift 中的测试 发布时间: 2021-06-21 18:18:02 评论数: 0
在软件开发中,测试的重要性不言而喻。Xcode 中集成了 XCTest 作为测试框架,Swift 代码的测试默认也使用这个框架进行。关于 XCTest 的使用方法,比如像 setUp,tearDown 以及 testxxx 等在 Swift 下和以前也并没有什么不同,作为一本介绍 tip 的书籍,我不打算在此重复这些。如果对测试的理论基础和实践方法感兴趣的话,不妨看看 Objective-C 中国上相关的话题文章。XCTest 中测试和待测试的 app 是分别独立存在于两个不同的 target 里的。这在 Swift 2.0 之前使测试 Swift 代码时面临了由访问权限带来的 ......
正则表达式 发布时间: 2021-06-19 03:08:25 评论数: 0
作为一门先进的编程语言,Swift 可以说吸收了众多其他先进语言的优点,但是有一点却是让人略微失望的,就是 Swift 至今为止并没有在语言层面上支持正则表达式。大概是因为其实 app 开发并不像 Perl 或者 Ruby 那样的语言需要处理很多文字匹配的问题,Cocoa 开发者确实不是特别依赖正则表达式。但是并不排除有希望使用正则表达式的场景,我们是否能像其他语言一样,使用比如 =~ 这样的符号来进行正则匹配呢?最容易想到也是最容易实现的当然是自定义 =~ 这个运算符。在 Cocoa 中我们可以使用 NSRegularExpression 来做正则匹配,那么其实我们为它写一个 ......
类型转换(Type Casting) 发布时间: 2021-06-16 09:03:52 评论数: 0
本页包含内容:定义一个类层次作为例子检查类型向下转型(Downcasting)Any和AnyObject的类型转换_类型转换_可以判断实例的类型,也可以将实例看做是其父类或者子类的实例。类型转换在 Swift 中使用is 和 as操作符实现。这两个操作符提供了一种简单达意的方式去检查值的类型或者转换它的类型。你也可以用来检查一个类是否实现了某个协议,就像在 Checking for Protocol Conformance部分讲述的一样。定义一个类层次作为例子你可以将它用在类和子类的层次结构上,检查特定类实例的类型并且转换这个类实例的类型成为这个层次结构中的其他类型。这下面的三 ......
JSON 发布时间: 2021-06-13 07:42:47 评论数: 0
如果 app 需要有网络功能并且有一个后端服务器处理和返回数据的话,那么现在基本上要和 JSON 打交道是没跑儿了的。在 Swift 里处理 JSON 其实是一件挺棘手的事情,因为 Swift 对于类型的要求非常严格,所以在解析完 JSON 之后想要从结果的 AnyObject 中获取某个键值是一件非常麻烦的事情。举个例子,我们使用 NSJSONSerialization 解析完一个 JSON 字符串后,得到的是 AnyObject?:// jsonString {"menu": { "id": "file", "value": "File", "pop ......
属性 (Properties) 发布时间: 2021-06-10 01:09:59 评论数: 0
本页包含内容:存储属性(Stored Properties)计算属性(Computed Properties)属性观察器(Property Observers)全局变量和局部变量(Global and Local Variables)类型属性(Type Properties)属性将值跟特定的类、结构或枚举关联。存储属性存储常量或变量作为实例的一部分,计算属性计算(而不是存储)一个值。计算属性可以用于类、结构体和枚举里,存储属性只能用于类和结构体。存储属性和计算属性通常用于特定类型的实例,但是,属性也可以直接用于类型本身,这种属性称为类型属性。另外,还可以定义属性观察器来监控属性 ......


友情链接: php5000技术知识分享 github 码云 开源中国 csdn linux中国 阿里云 unix技术网 composer中文网 php packagist php python 安卓软件 大众源码 DevStore 猪八戒威客网 人人都是产品经理 PHPwind论坛 互联网的一些事 新客网 黑马程序员 火星时代 hao123it ThinkSNS 开源社区 51CTO学院 办事儿网 IT论坛 java教程 最代码 程序员客栈 大数据培训 小程序开发 微信小程序 php开发新闻 微信小程序 java学习 微信小程序 Linux书籍 网站ip流量 xw素材网 新浪云 腾讯云 华为云 百度 新浪 网易 淘宝 腾讯 1688 搜狐 优酷 房天下 hao123 携程 天涯社区