最近从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笔记的更多相关文章

  1. [Swift] Swift笔记

    开始整理Swift笔记了.打算直接用Playground去写,里面自带的Markup语法和Markdown差不多,显示的效果也不差于博客.而且用Xcode看代码也方便.所以这部分内容不再在博客里记录了 ...

  2. 从0开始学Swift笔记整理(五)

    这是跟在上一篇博文后续内容: --Core Foundation框架 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Sw ...

  3. 从0开始学Swift笔记整理(四)

    这是跟在上一篇博文后续内容: --重写方法 重写实例方法 在子类中重写从父类继承来的实例方法和静态方法.先介绍实例方法的重写. 下面看一个示例: class Person {        var n ...

  4. 从0开始学Swift笔记整理(三)

    这是跟在上一篇博文后续内容: --Swift中相关的属性 存储属性 Swift中的属性分为存储属性和计算属性,存储属性就是Objective-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性 ...

  5. 从0开始学Swift笔记整理(二)

    这是跟在上一篇博文后续内容: --函数中参数的传递引用 类是引用类型,其他的数据类型如整型.浮点型.布尔型.字符.字符串.元组.集合.枚举和结构体全部是值类型. 有的时候就是要将一个值类型参数以引用方 ...

  6. 从0开始学Swift笔记整理(一)

    Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它建立在最好的 C 和 Objective-C 语言之上,并且没有 C 语言的兼容性限制.Swift 采用安全的编程模式,增加了现代 ...

  7. swift 笔记 (十八) —— 扩展

    扩展 扩展能够让我们给一个已有的类.结构体.枚举等类型加入�新功能,包含属性和方法,甚至是构造器,下标,支持协议等等... 甚至是我们拿不到源码的类.结构体.枚举,我们依旧能够给它加扩展... 看到这 ...

  8. swift 笔记 (十二) —— 下标

    下标 swift同意我们为 类.结构体,枚举 定义下标,以更便捷的方式訪问一大堆属性.比方Array和Dictionary都是结构体,swift的project师已经为这两个类型提供好了下标操作的代码 ...

  9. swift 笔记 (十九) —— 协议

    协议(Protocols) 协议仅是用定义某些任务或者是功能必须的方法和属性. 类似于java里的interface的作用.但协议并不会实现详细的功能. 我猜这个名字源于OO中提到的"契约& ...

  10. swift 笔记 (七) —— 关闭

    关闭 封闭件是从包括以下各项的组.它可以在代码被发送"片"... 行,不纠结的定义.继续. swift的闭包,有点像C和Objective-C语言里的 代码块 {--}  闭包能够 ...

随机推荐

  1. CentOS安装crontab及使用方法(汇总多人博客并实践确认无误)

    安装centOS: yum -y install vixie-cron --该软件包是cron的主程序 yum -y install crontabs--该软件包用来安装.卸载或者列举需要cron来守 ...

  2. React之事件绑定、列表中key的使用

    在学习React的Hadding Events这一章节,发现事件回调函数的几种写法,看似区别不大,但实际差异还是蛮大的. class Toggle extends React.Component{ c ...

  3. Volley之 JsonRequest 解析JSON 数据

    ReqestQueue 和 JsonRequest String jsonUrl = "http://ip.taobao.com/service/getIpInfo.php?ip=63.22 ...

  4. Socket模块学习

    Socket是什么呢?     Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socke ...

  5. AsyncTask异步交互和httpurlconnection结合使用

    //网络请求数据 package com.baidu.myutils; import java.io.BufferedReader; import java.io.InputStreamReader; ...

  6. DOM操作 ——如何添加、移除、移动、复制、创建和查找节点等。

    DOM操作 --如何添加.移除.移动.复制.创建和查找节点等. (1)创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个 ...

  7. Python开发入门与实战14-基于Extjs的界面

    14. 基于Extjs的界面 上一章我们实现了一个原生的html例子,本章我们将采用Extjs实现界面的展现,来说明MVC模式下我们是怎么考虑界面与业务层的关系的. 14.1. 引用Extjs目录 首 ...

  8. Spark的WorkCount的例子

    之前为了搭建scala开发spark的环境花了几天的时间,终于搞定了,具体可以参考:http://www.cnblogs.com/ljy2013/p/4964201.html   .下面就是用一个示例 ...

  9. NLog的使用

    1.项目添加NLog的项目引用: 2.将工程的framework框架改为3.5或4.0,将配置文件[NLog.config]拷贝至运行的bin/(release/debug)路径下 3.项目中代码使用 ...

  10. 头疼--windows之安装meteor.js

    如果你的电脑是window,这篇文章会的对你有些帮助. 进入meteor官网下载的meteor for windows安装包老是安装失败而且很慢,很慢,经过一番研究之下,终于安装成功了,特此来分享下经 ...