在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近从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"
这里开始记录一些小技巧,方便以后查看 一、设置volumeios中没有直接的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) }
|
请发表评论