Swift笔记

最近从Xcode6 beta4开始到现在的Xcode6.0.1,使用Swift一段时间了,Swift大体来说,语法与java、c++比较接近,相比objective-c要友好多了,也更容易上手,这里记录一下遇到的问题。

一. 类的使用

1. 属性初始化

Swift中类的属性(类似java成员变量)在声明之后,必须进行初始化,否则编译出错的,初始化方式主要有三种:

(1) 声明的时候赋值

var name: String = ""

(2) 使用构造函数初始化

class Student {
    var name: String
    
    init() {
        self.name = "Henry"
    }
}

(3) 声明为optional变量

经常会遇到不想或者无法赋初值的情况,比如ViewController中添加一个UIView,此时可以声明成为optional,默认初始值为nil

class MyViewController: UIViewController {
    var myView: UIView?
}

optional变量使用前需要先判断是否为空,不为空将"?"改为"!" 

var optionalString: String? = "not nil"
if optionalString != nil {
    println(optionalString!)
}

 

2. 属性监视器

属性监视器是Swift中非常好用的一项特色,类似于objective-c中原先的"KVO",不过简便很多

class Student {
    var name: String? {
        didSet {
            if(name != nil && name != oldValue) {
                println("new name: \(name!)")
            }
        }
    }
}
var student: Student = Student()
student.name = "Henry"

输出打印:

"new name: Henry"

 

3. 单例模式

 单例模式是面向对象中经常用到的,参考Github中的开源项目,提供了三种实现

 

二、类型转化

Swift是不支持隐式转化的,这点最让人无语了(图片出处--Github工程:https://github.com/onevcat/Easy-Cal-Swift

class之间就更不可能隐式转化了,所以在Swift中必须老老实实,显示转化,搞清楚你使用的类型对不对

类之间转化:

var volumeSlider: UISlider = view as UISlider

判断是否是此class的实例,两种方式:

(1) 使用"is"关键字

if view is UISlider {
    var volumeSlider: UISlider = view as UISlider
}

(2) 使用"as?"关键字

if (view as? UISlider) != nil {
    var volumeSlider: UISlider = view as UISlider
}

 

三、集合类型

集合主要是指Array与Dictionary,与objective-c中的NSArray合NSDictionary相对应,通常用法就不说了,主要记录一下对于可变长度集合的用法

声明:

var language: [String] = [String]()
var languageDict: [String : String] = [String : String]()

添加新值:

language[0] = "english"  // error
language.append("English") // right
languageDict["en"] = "English"

 

这里开始记录一些小技巧,方便以后查看

一、设置volume

ios中没有直接的api来设置音量,根据Apple官方文档,这样的操作是需要通知用户的,必须要有用户的交互,但有时候还是会遇到需要在app中改变音量

ios6之前可以用下面的方法:

MPMusicPlayerController *musicPlayer = [MPMusicPlayerController applicationMusicPlayer];
musicPlayer.volume = 1.0f;

不过这个方法在ios7中已经被deprecated了,swift中更是volume这个属性是不可见的

swift中的方法:

func setVolumeMax() {
    var volumeView: MPVolumeView = MPVolumeView()
    for view in volumeView.subviews {
        if view is UISlider {
            var volumeSlider: UISlider = view as UISlider
            volumeSlider.setValue(1.0, animated: true)
            volumeSlider.sendActionsForControlEvents(UIControlEvents.TouchUpInside)
            break
        }
    }
}

 

二、设置iphone支持倒置屏

ipad默认支持倒置屏,iphone是不支持的,iphone中如果想支持倒置屏,需要实现一个新的NavigationController继承于UINavigationController,同时override父类中的方法:

override func shouldAutorotate() -> Bool {
    return true
}
    
override func supportedInterfaceOrientations() -> Int {
    var result = UIInterfaceOrientationMask.Portrait.toRaw() | UIInterfaceOrientationMask.PortraitUpsideDown.toRaw()
    return Int(result)
}

 

posted on 2014-09-23 15:06  treecat  阅读(260)  评论(0)    收藏  举报