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)
- }
Swift笔记的更多相关文章
- [Swift] Swift笔记
开始整理Swift笔记了.打算直接用Playground去写,里面自带的Markup语法和Markdown差不多,显示的效果也不差于博客.而且用Xcode看代码也方便.所以这部分内容不再在博客里记录了 ...
- 从0开始学Swift笔记整理(五)
这是跟在上一篇博文后续内容: --Core Foundation框架 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Sw ...
- 从0开始学Swift笔记整理(四)
这是跟在上一篇博文后续内容: --重写方法 重写实例方法 在子类中重写从父类继承来的实例方法和静态方法.先介绍实例方法的重写. 下面看一个示例: class Person { var n ...
- 从0开始学Swift笔记整理(三)
这是跟在上一篇博文后续内容: --Swift中相关的属性 存储属性 Swift中的属性分为存储属性和计算属性,存储属性就是Objective-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性 ...
- 从0开始学Swift笔记整理(二)
这是跟在上一篇博文后续内容: --函数中参数的传递引用 类是引用类型,其他的数据类型如整型.浮点型.布尔型.字符.字符串.元组.集合.枚举和结构体全部是值类型. 有的时候就是要将一个值类型参数以引用方 ...
- 从0开始学Swift笔记整理(一)
Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它建立在最好的 C 和 Objective-C 语言之上,并且没有 C 语言的兼容性限制.Swift 采用安全的编程模式,增加了现代 ...
- swift 笔记 (十八) —— 扩展
扩展 扩展能够让我们给一个已有的类.结构体.枚举等类型加入�新功能,包含属性和方法,甚至是构造器,下标,支持协议等等... 甚至是我们拿不到源码的类.结构体.枚举,我们依旧能够给它加扩展... 看到这 ...
- swift 笔记 (十二) —— 下标
下标 swift同意我们为 类.结构体,枚举 定义下标,以更便捷的方式訪问一大堆属性.比方Array和Dictionary都是结构体,swift的project师已经为这两个类型提供好了下标操作的代码 ...
- swift 笔记 (十九) ——
协议
协议(Protocols) 协议仅是用定义某些任务或者是功能必须的方法和属性. 类似于java里的interface的作用.但协议并不会实现详细的功能. 我猜这个名字源于OO中提到的"契约& ...
- swift 笔记 (七) —— 关闭
关闭 封闭件是从包括以下各项的组.它可以在代码被发送"片"... 行,不纠结的定义.继续. swift的闭包,有点像C和Objective-C语言里的 代码块 {--} 闭包能够 ...
随机推荐
- gif显示
public void gifplay(string path,ref Panel panel) { try{ Bitmap animatedGif = new Bitmap(path ); Grap ...
- Tomcat配置错误导致Quartz执行两次问题
以下基于tomcat服务器 我们通常将域名映射到指定服务器的端口上,以通过域名直接访问服务,如http://www.abc.com域名已绑定到本机的80端口,项目名wechat,则直接访问http:/ ...
- vmware linux centos安装
首先,网上下载vmware,下载后直接安装即可,没什么难度,就不多说了 接下来在vmware中点击create a New Virtual Machine,启动安装界面 选择自定义方式安装,再点击ne ...
- 依然同上~ 点击获取当前option的value与text
$(".tjbtn").click(function(){ $('#leader').each(function(index, ele){ var leader = ele.val ...
- eap-ttls/mschapv2
eap-ttls/mschapv2 文件路径 用途 示例 备注 #gedit /usr/local/etc/raddb/sites-available/default #gedit /us ...
- MySQL正则表达式
正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较. MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据. MySQL仅支持 ...
- boost和std中的thread的引用参数
boost 1.60.0 先上代码: #include <boost/thread.hpp> #include <iostream> void add(int &i) ...
- LeetCode 7 -- String to Integer (atoi)
Implement atoi to convert a string to an integer. 转换很简单,唯一的难点在于需要开率各种输入情况,例如空字符串,含有空格,字母等等. 另外需在写的时候 ...
- OpenSuse Caffe CNN库 配置
参考官方文档:http://caffe.berkeleyvision.org/installation.html 1. 安装CUDA 参考 http://www.cnblogs.com/sunshy/ ...
- target和currentTarget的区别
target在事件流的目标阶段:currentTarget在事件流的捕获,目标及冒泡阶段.只有当事件流处在目标阶段的时候,两个的指向才是一样的, 而当处于捕获和冒泡阶段的时候,target指向被单击的 ...