Swift

外部参数名总结:

假设有以下代码

func sum(num1: Int, num2: Int) -> Int
{
    return num1 + num2
}
  • 函数

    • 默认情况下,所有参数仅仅是局部参数名,不是外部参数名
    sum(1, 2)
    
  • 方法

    • 默认情况下,第一个参数仅仅是除第一个参数以外,其他所有参数,既是局部参数名,又是外部参数名
    var me = Person()
    me.sum(1, num2: 2)
    
  • 构造方法

    • 默认情况下,所有参数既是局部参数名,又是外部参数名
    var me = Person(num1: 1, num2: 2)
    

!和?的区别

从IB中拖线的控件对应的变量:

// 系统自带
@IBOutlet weak var display: UILabel!

// 如果这样
@IBOutlet weak var display: UILabel?

?表示display是一个可选类型(option),!表示对可选类型进行强制解包,如果解包的变量是nil,程序就会崩溃.

系统自带的相当于在xib解档赋值的时候,进行了强制解包;而后面修改后,赋值时没有进行强制解包,所以后面使用display时,需要这样使用以获取其属性-->display!.text

枚举

swift的枚举可以关联任何类型,包括函数

函数在swift里面也是一个类型,和字符串没什么区别

在swift,所有的运算符,*等都是函数

尽量使内部成员private,在以后想访问时再进行打开操作

数组和字典在swift中是结构体(Int、Double等也是),所以传值的时候,是进行的值传递;除类是引用传递以外,其他类型都是值传递

Optional就是一个enum

enum Optional<T> {
    case None
    case Some(T)
}


let x: String? = nil 等价
let x = Optional<String>.None

let x: String? = "hello" 等价
let x = Optional<String>.Some("hello")

var y = x! 等价
switch x {
    case Some(let value): y = value
    case None: 抛出异常
}

...和..<是Range结构体的特殊实现:

struct Range<T> {
    var startIndex: T
    var endIndex: T
}

关于桥接

Swift中,String、Array、Dictionary是结构体(struct),不是对象(classes),但是他们还是可以称为AnyObject类型。这是因为他们桥接的NS对应类型是对象(NSString、NSArray、NSDictionary)

构造器的自动继承

1、 子类没有定义任何指定构造器,它将自动继承所有父类的指定构造器
2、如果子类提供了所有父类指定构造器的实现--不管是通过规则1继承过来的,还是通过自定义实现的,它将自动继承所有父类的便利构造器

模型相关

模型使用struct进行定义

如果想在控制器中扩展模型的属性,直接在控制器中使用extension扩展模型属性就行了,因为只增加了自己想要使用的属性,模型中原来的属性并没有变化,所以并没有不合适的地方

判断当前控制器view有没有显示在界面上

if view.window == nil {
  // 没有显示在当前界面上
}

关于unwind(在storyboard中点击对应控件进行返回)

有控制器V1->V2->V3

需要点击V2上的按钮跳转会V1、点击V3的按钮跳转会V1

可以在Storyboard中做以下操作:

1、在V1中实现以下方法

  • 这个方法有两点要求
    • 需要有@IBAction修饰
    • 参数需要为UIStoryboardSegue类型
@IBAction func goBack(segue: UIStoryboardSegue) {
    print("哈哈哈哈")
}

2、在V2、V3选中对应按钮,control+draging到对应控制器的以下地方

Snip20160104_1.png

3、如果在V1中实现了1步骤中方法,就会出现以下图片

Snip20160104_2.png

4、选择对应的方法,当点击V2、V3对应按钮时,就会进行跳转,并且执行这个方法

闭包中使用属性

swift闭包中使用属性,必须要加self,因为swift要提醒程序员,闭包中可能会造成循环引用

![

Snip20160104_6.png
]

swift代码风格

swift类中定义静态变量

Snip20160104_4.png

属性监视器中设置属性额外操作

Snip20160104_5.png

如上,在属性监视器中,可以设置以下操作:

  • 1、当将要设置视图的这个约束时,就将原先的这个约束清除
  • 2、当设置完这个约束之后,就将这个约束设置到view上

这两步充分利用了属性监视器,要是原先OC的写法,这两步操作就和属性分离了,得在设置属性的地方进行上面两个操作,或者得在setter方法中设置。

上面的属性是在这个属性的set方法中设置的

Snip20160104_6.png

在属性监视器中设置属性的一些值

dataSource的设置可以放在属性监听器里面,delegate也是同理

Snip20160104_9.png


给view添加手势也可以在属性监视器中

关于IBOutlet没有初始化的预防

Snip20160104_10.png
  • 这里的scrollView采用可选链来访问属性,是因为在设置image图片时,IBOutlet可能还没有设置
  • 这里的image计算属性,相当于imageView存储属性的set和get方法,方便对其进行操作
    • 主要是设置完imageView可以使用set,来对scrollView进行设置
  • 对scrollView一些属性的操作,可以放在scrollView已经被设置方法即didSet里面

多线程注意

Snip20160104_11.png

  • 多线程写法
  • 上面判断url是因为可能这次请求数据没到,下次就来了,所以需要判断

初始化注意

Snip20160104_12.png

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

推荐阅读更多精彩内容

  • 本章将会介绍 存储属性的初始赋值自定义构造过程默认构造器值类型的构造器代理类的继承和构造过程可失败构造器必要构造器...
    寒桥阅读 766评论 0 0
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,826评论 0 6
  • 构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例可用前必须执行这个过程,具体操作包括设置实例中每个...
    莽原奔马668阅读 679评论 0 3
  • 123.继承 一个类可以从另外一个类继承方法,属性和其他特征。当一个类继承另外一个类时, 继承类叫子类, 被继承的...
    无沣阅读 1,372评论 2 4
  • 下标脚本 下标脚本 可以定义在类、结构体和枚举这些目标中,可以认为是访问集合(collection),列表(li...
    cht005288阅读 440评论 0 0