• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift笔记

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最近从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)
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift中配置Keystone服务(转)发布时间:2022-07-13
下一篇:
Swift - 在ViewController中表格使用静态单元格(Static Cell)发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap