Swift开发

Swift

2016-01-04  本文已影响337人  RedSun_

外部参数名总结:

假设有以下代码

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

!和?的区别

从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 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
如上,在属性监视器中,可以设置以下操作:

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

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

Snip20160104_6.png

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

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

Snip20160104_9.png

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

关于IBOutlet没有初始化的预防

Snip20160104_10.png

多线程注意

Snip20160104_11.png

初始化注意

Snip20160104_12.png
上一篇下一篇

猜你喜欢

热点阅读