swift 3.0的一些技巧

这段时间称着工作不是很忙一直在接触swift3.0,所以就把我这段时间学习的一些成果分享给大家。我就一些普通项目中用到的技术展开说明:

注意:此篇文章适合有一些swift基础的人阅读,如果文章中有什么不合理或者不对的地方欢迎大家指出,谢谢!

1、语法篇:

随之swift4.0推出,swift的从3.0开始语法都接近成熟,完善。swift的语法相对于OC来说变的想当简单:
1、swift语法都采用链式方式进行访问属性(也就是“.”),比如初始化一个Button并设置它的相关属性

addBtn.setImage(kImageName("add_channel_titlbar_thin_new_night_16x16_"), for: .normal)
addBtn.frame=CGRect(x:kScreenWidth40,y:0,width:40,height:40)
addBtn.setTitleColor(UIColor.white, for: .normal)
addBtn.addTarget(self, action:#selector(addBtnClick), for: .touchUpInside)  

2、swift没有强制类型转换,所有不同类型的操作都需要手动做类型转换,比如

let cell = collectionView .dequeueReusableCell(withReuseIdentifier:CollectCellID, for: indexPath)  as! UICollectionViewCell
(这里的"as"关键字就是做类型转换的)

如果需数字之间相互转换,怎可以这样写
va rdoubleNumber =1.8 
var intNumber =0
intNumber = Int(doubleNumber)
println(intNumber)

3、懒加载

swifi中懒加载使用一个新的关键字“lazy”进行声明,具体写法如下

  lazy varbottomLine:UIView = {
  letbottomLine =UIView()
  bottomLine.backgroundColor= .red
  bottomLine.height=2
  bottomLine.y=37
  return bottomLine
}()    这里声明了一个View,并做了一些初始化操作

4、注册表格Cell和表格Cell的初始化

一、加载有xib的cell

注册
mainTableView.register(UINib.init(nibName:String(describing:UITableViewCell.self), bundle:nil), forCellReuseIdentifier:String(describing:UITableViewCell.self))

加载cell
let cell =Bundle.main.loadNibNamed(String(describing:UITableViewCell.self), owner:nil, options:nil)?.lastas!UITableViewCell

二、加载用代码纯撸的

注册
mainTableView.register(UITableViewCell.self, forCellReuseIdentifier: MAINCELLID)

加载
let cell = tableView.dequeueReusableCell(withIdentifier: CELLID) as! UITableViewCell

5、didSet和willSet方法

在Swift语言中用了willSet和didSet这两个特性来监视属性的除初始化之外的属性值变化,下面通过一个例子来说明他们的用途

"import Foundation
class People : NSObject
{
    //普通属性var firstName:String =""var lastName:String=""var 
    nickName:String=""//计算属性var fullName:String
{
get{
    return nickName+""+ firstName +""+lastName
    }
//带属性监视器的普通属性var age:Int =0{//我们需要在age属性变化前做点什么willSet

println("Will set an new value \(newValue) to age")
}
//我们需要在age属性发生变化后,更新一下nickName这个属性

  didSet
  {
       println("age filed changed form \(oldValue) to \
      (age)")ifage<10{
      nickName="Little"}else{
      nickName="Big"
   }
}
func toString()->String
{
    return"Full Name: \(fullName)"+", Age: \(age)"}
}
var me=People()
me.firstName="Zhang"me.lastName="San"me.age=20println(me.toString())"

6、Extension
swift的extension可以做如下几件事,

  • 添加计算属性 - computed properties
  • 添加方法 - methods
  • 添加初始化方法 - initializers
  • 添加附属脚本 - subscripts
  • 添加并使用嵌套类型 - nested types
  • 遵循并实现某一协议 - conform protocol

其实说白了我感觉extension的作用就是把一些相同的操作,放到一起,就比如某些系统的代理,运算某些数值。这样可以增加代码的可读性和条理性,方便后期维护代码

7、格式输出符
在OC的时候我们一般通过NSString的stringWithFormat来对文本进行修饰,但是在swift里这个操作将变的非常简单,

let str = "\(commond)" + "评论"
或者
let str = "\(commond)评论" 这里的\是带有转义字符的效果

8、可选类型
相信你们在学习可选类型的时候,一定会很痛苦,到底什么时候用“!”和什么时候“?”但是不加的时候一定会报错。其实我当时也郁闷了一段时间,但是随着代码的越写越多渐渐的对他们了解的更加透彻。这里还是引入苹果的一段说法:Swift是一门安全的编程语言. 正如苹果所言, 可选类型就是证明Swift是一门安全的编程语言的一个小例子. 如上面的例子所示, Swift的可选类型提供了在编译阶段就检查一些可能在运行时才会出现的常见错误的机制. 我在做项目的时候有时候碰到一个数字或者字典为空或者没有被初始化,这样可能会导致程序崩溃,但是如果用到苹果的可选类型的话这个问题可能就会不容易发生。在可选类型后面加一个感叹号(!)来表示它肯定有值.这叫做硬解包.也就是说如果你不给他赋值编译器是编译通过不了的;在可选类型后面加问号(?)则代表变量有时候可能是空的,也有可能不为空

9、文件引用
swift对于项目内的文件是不需要添加头文件引用的,只有对于项目之外没有添加引用关系的文件才会需要收到引用一次,但是只需要引用一次就可以整体项目里使用。比如通过cocoaPod添加的文件和一些系统的文件等等

2、工具篇

在这一篇,我总结了一些常用的工具和函数

/// idfv
let idfv =UIDevice.current.identifierForVendor?.uuidString
/// 版本号
let versionCode =Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String
/// 系统版本号
let systemVersion =UIDevice.current.systemVersion

//MARK: - 列举一些常用宏

// log方法
funckLog(_message:T, file:String=#file, funcName:String=#function, lineNum:Int=#line) {

#ifDEBUG
letfileName = (fileasNSString).lastPathComponent
print("\(fileName)---\(funcName)---\(lineNum):\(message)")
#endif
}

// MARK: - Color

/** RGBA的颜色设置 */
funckRGBA(_r:CGFloat, g:CGFloat, b:CGFloat, a:CGFloat) ->UIColor{
return UIColor(red: r/255.0, green: g/255.0, blue: b/255.0, alpha: a)
}

/** 0xFF0000的颜色设置 */
funckColorHexA(_hex6:UInt32, alpha:CGFloat=1) ->UIColor{
letred = CGFloat((hex6 &0xFF0000) >>16) /255.0
letgreen = CGFloat((hex6 &0x00FF00) >>8)/255.0
letblue = CGFloat((hex6 &0x0000FF))/255.0
return UIColor(red: red, green: green, blue: blue, alpha: alpha)
}

/** 随机颜色 */

funckRandomColor() ->UIColor{
let randomRed = CGFloat(arc4random_uniform(256))
let randomGreen = CGFloat(arc4random_uniform(256))
let randomBlue = CGFloat(arc4random_uniform(256))
return UIColor(red: randomRed/255.0, green: randomGreen/255.0, blue: randomBlue/255.0, alpha:1.0)
}

//** 字体大小 */
funckFont(_size:CGFloat)->UIFont{
returnUIFont.systemFont(ofSize: size)
}

/** 访问图片 */
funckImageName(_name:String)->UIImage{
return UIImage.init(named: name)!
}

3、第三方常用库篇

网络请求

图片选择、浏览 (这部分swift库真少呀 欢迎知道的补充)

约束Autolayout

SnapKit

总结

swift是一门很强大的语言,我总结的可能只是占很少一部分,后续我也会在加一些东西。最后感谢你能阅读我的文章!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,069评论 4 358
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,212评论 1 287
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 105,912评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,424评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,741评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,194评论 1 206
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,553评论 2 307
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,289评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,923评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,251评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,775评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,144评论 2 249
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,698评论 3 228
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,936评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,658评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,214评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,159评论 2 258

推荐阅读更多精彩内容