3.函数:

在Swift中函数的定义基本与OC一样。

主要区别为:

  1. 通过func关键词定义函数

  2. 返回值在->关键词后标注

各举一个类方法与实例方法例子。

1
2
+ (UIColor*)blackColor
- (void)addSubview:(UIView *)view

对应的swift版本

1
2
    class func blackColor() -> UIColor //类方法, 通过 class func 关键词声明
    func addSubview(view: UIView) //实例方法

在我们的项目中,经常会不断进行功能的增添。为了新增特性,许多方法在开发的过程中不断变动。举一个例子:我们开始有一个tableViewCell,它的设置方法一开始简单地需要一个Model参数:

1
func configureCellWithModel(Model: model)

不久之后,我们想对部分Cell增添一个设置背景颜色的功能。方法需要再接收多一个参数:

1
func configureCellWithModel(Model: model,color:UIColor)

这个时候方法改变,所以涉及到这些方法的地方都需要修改。给我们造成的困扰

一是:需要做许多重复修改的工作。

二是:无法做得很好的扩展和定制,有些地方的cell需要设置颜色,有些不需要。但是在OC里,我们只能对所有的cell都赋值。你可能觉得我们可以写两个方法,一个接收颜色参数,一个不接受。但是我们知道这不是一个很好的解决方法,会造成冗余的代码,维护起来也不方便。

而在Swift中,default parameter values的引入让我们能够这样修改我们的代码:

1
func configureCellWithModel(Model: model,color:UIColor = UIColor.whiteColor())

这样的改进能让我们写出的代码更具向后兼容性,减少了我们的重复工作量。

4.类与初始化(Initializers):

在Swift中,我们通过Access Control来进行控制公有和私有属性和方法。

properties, types, functions等能够进行版本控制的统称为实体。

  • Public:可以访问自己模块或应用中源文件里的任何实体,别人也可以访问引入该模块中源文件里的所有实体。通常情况下,某个接口或Framework是可以被任何人使用时,你可以将其设置为public级别。

  • Internal:可以访问自己模块或应用中源文件里的任何实体,但是别人不能访问该模块中源文件里的实体。通常情况下,某个接口或Framework作为内部结构使用时,你可以将其设置为internal级别。

  • Private:只能在当前源文件中使用的实体,称为私有实体。使用private级别,可以用作隐藏某些功能的实现细节

一个小技巧,如果我们有一系列的私有方法,我们可以把它们组织起来,放进一个extension里,这样就不需要每个方法都标记private,同时也便于管理组织代码:

1
2
3
4
5
// MARK: Private
private extension ViewController {
    func privateFunction() {
    }
}

创建对象与alloc和init

关于初始化,在Swift中创建一个对象的语法很简洁:只需在类名后加一对圆括号即可。

1
var shape = Shape()

在Swift中,initializer也与OC有所区别,Swift的初始化方法不返回数据。而在OC中我们通常返回一个self指针。

Swift的初始化方法让我们只关注对象的初始化。之前在OC世界中为什么要self = [super init]?。这种问题得以避免。Swift帮助我们处理了alloc的过程。也让我们的代码更简洁明确。

而在Swift中,init也有了更严格的规则。

  • 对于所有Stored Properties,都必须在对象被创建出来前设置好。也就是我们必须在init方法中赋好值,或是直接给属性提供一个默认值。

如果有property可以被允许在初始出来时没有值,也就是需要在创建出来后再赋值,或是在程序运行过程都可能不会被赋值。那么这个property必须被声明为optional类型。该类型的属性会在init的时候初始化为nil.

  • initializer严格分为Designated Initializer和Convenience Initializer 并且有语法定义。

而在Objective-C中没有明确语法标记哪个初始化方式是convenience方法。关于Designated Initializer可参阅之前的:Objective-C 拾遗:designated initializer

1
2
3
4
5
6
7
init(parameters) {
    statements
}
 
convenience init(parameters) {
    statements
}

Swift学习 (三)的更多相关文章

  1. Swift学习三

    http://blog.csdn.net/kuloveyouwei/article/details/36005299 Swift 提供两种集合类型来存储集合,数组和字典.数组是一个同类型的序列化列表集 ...

  2. Swift学习——使用if和switch来进行条件操作,使用for,while,和do-while来进行循环(三)

    Swift学习--使用if和switch来进行条件操作,使用for,while,和do-while来进行循环 //switch支持随意类型的数据以及各种比較操作--不不过整数以及測试相等 //注意假设 ...

  3. iOS ---Swift学习与复习

    swift中文网 http://www.swiftv.cn http://swifter.tips/ http://objccn.io/ http://www.swiftmi.com/code4swi ...

  4. [转]swift 学习资源 大集合

    今天看到了一个swift的学习网站,里面收集了很多学习资源 [转自http://blog.csdn.net/sqc3375177/article/details/29206779] Swift 介绍 ...

  5. swift 学习资源 大集合

    今天看到一个swift学习网站,其中我们收集了大量的学习资源 Swift 介绍 Swift 介绍 来自 Apple 官方 Swift 简单介绍 (@peng_gong) 一篇不错的中文简单介绍 [译] ...

  6. Swift学习笔记(一)搭配环境以及代码运行成功

    原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...

  7. Swift学习目录

    本学习基于苹果官方Swift学习材料,保留了原版90%左右的内容(一些项目开发中基本不用的知识点没有整理),并根据理解进行整理.如对原版感兴趣,可以直接单击链接阅读和学习. 第一部分 基础篇 1.基本 ...

  8. Swift学习与复习

    swift中文网 http://www.swiftv.cn http://swifter.tips/ http://objccn.io/ http://www.swiftmi.com/code4swi ...

  9. 【swift学习笔记】二.页面转跳数据回传

    上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...

  10. 今天开始Swift学习

    今天开始Swift学习  在此记录笔记  以备之后查阅! allenhuang

随机推荐

  1. P2P system: Chord

    DHT= Distributed Hash Table store the objects(files) at nodes (hosts, machines) in a cluster. The cl ...

  2. 在 windows 上安装 git 2.15

    下载 by win 下载地址:https://git-scm.com/download/win 如下图.选择对应的版本下载: 安装 by win 1.双击下载好的git安装包.弹出提示框.如下图: 2 ...

  3. Kubernetes 从懵圈到熟练 – 集群网络详解(转)

    阿里云K8S集群网络目前有两种方案,一种是flannel方案,另外一种是基于calico和弹性网卡eni的terway方案.Terway和flannel类似,不同的地方在于,terway支持Pod弹性 ...

  4. css 移动端页面,在ios中,margin-bottom 没有生效

    在开发中,你会遇到各种美轮美奂的UI交互设计图,下面这种UI图,我在开发时就在布局上遇到一个小问题 问题现象:ios 手机滚动到底部,底部的margin-bottom不生效,Android手机和模拟器 ...

  5. django中使用form表单,数据库保存密码出现明文

  6. [Javascript] Run asynchronous functions in sequence using reduce

    This can be handy if you have a rate limit on API requests or if you need to pass the result of each ...

  7. 009——C#全局变量定义

    (一)窗体二定义,static静态 public static byte[] waveform_data = { }; // 数据,在串口接收中变化 public static bool wavefo ...

  8. Elasticsearch环境搭建和介绍(Windows)

    一.Elasticsearch介绍和安装 1.1 介绍  Elastic Elastic官网:https://www.elastic.co/cn/ Elastic有一条完整的产品线:Elasticse ...

  9. 2017.11.8 Noip2017 考前模拟赛

    ----------------------------------T1---------------------------------- ——>足球联赛 题目描述 巴蜀中学新一季的足球联赛开 ...

  10. python 比较运算符和逻辑运算符

    <1> 比较(即关系)运算符 python中的比较运算符如下表 运算符 描述 示例 == 检查两个操作数的值是否相等,如果是则条件变为真. 如a=3,b=3则(a == b) 为 true ...