最近从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) }
浙公网安备 33010602011771号