又是周五了,周末不要浪,一起学点Swift!本周再次为大家带来了一些Swift的小技巧,都是些奇淫巧计,不知道也无妨,但Swift最吸引我的一点就是它的简洁易用。主要内容有:

  1. private(set)语法
  2. 分号的使用
  3. 利用String类型初始化方法简化UITableViewCellreuseIdentifier
  4. 简洁的声明多个变量
  5. 压轴推荐:Xcode断点调试小技巧

我为这篇博客制作了一个demo,您可以去在我的github上clone下来:SwiftTips,如果觉得有帮助还望给个star以示支持。

private(set)

出于代码安全性的考虑,如果一个类的属性不会被其他类使用,那么可以把它声明为private。更进一步我们可以使用private(set)关键字告诉编译器,这个类对外可读但是不可写,比如:

// In other swift file
struct Person {
private(set) var name = "Unknown"
} // In main.swift
// 可以获取name属性的值
print(person.name) // 报错,不能在PrivateSet.swift文件外对name属性赋值
//person.name = "newName"
复制代码

这个属性只能在文件内部被读写,即使是在结构体的定义外也可以。但是在别的文件中就不能对其赋值了。

需要强调的一点是,只有private(set)关键字,并没有private(get)关键字。

利用好分号

分号在Swift中几乎退出了历史舞台,但在某些情况下使用分号也是不错的选择。

假设在函数的开头有一个guard判断,如果判断不成立则退出函数,并输出一些调试信息,过去的版本可以这样写:

func doSomething() {
let error: AnyObject? = nil
guard error == nil
else {
print("Error information")
return
}
}
复制代码

如果使用分号,可以简化代码,它把代码压缩在一行语句中,简洁又不失可读性:

func doSomething() {
let error: AnyObject? = nil
guard error == nil else { print("Error information"); return }
}
复制代码

reuseIdentifier

给cell一个reuseIdentifier是一件挺麻烦的事情,首先不能瞎起名字,比如let reuseIdentifier = "reuse"。一旦同一个UITableView中有两种或更多cell,事情就比较麻烦了。

这就要求我们为reuseIdentifier赋值是要考虑到字符串的具体含义,比如代码可能是这样的:

let reuseIdentifier = "TableViewCommentCellIndentifer"
复制代码

作为一个喜欢偷懒的人,为了节省起名字以及输入这些字符串的时间,我们完全可以这样写:

let reuseIdentifier = String(TableViewCell)
复制代码

这里的TableViewCell是自定义的UITableViewCell的子类,把它传入字符串的构造函数中得到的结果是"TableViewCell",一切显得那么和谐简介。

关于字符串初始化函数的规则,可以参考我的这篇文章:你其实真的不懂print("Hello,world")

简洁声明多个变量

对于一些相互有关联的变量,相比于在每行中声明一个,还有一种更简洁美观的方式:

var (top, left, width, height) = (0.0, 0.0, 100.0, 50.0)
//rect.width = width
复制代码

Xcode断点调试小技巧

好吧,我承认上一个tip的实用性不是很强,有点凑数字之嫌,下面重点介绍一些调试方面的技巧作为补偿。

可能很多人都知道使用断点能够大幅度提高开发效率,其实Xcode断点还有更多的功能值的发掘。比如我们可以在触发断点时不终止程序运行(如果不需要单步调试的话):

勾选最后一个选项后,程序就不会在断点处终止了。

其他的几个选项也很有用处,第一个表示在什么情况下才会触发断点,第二个选项表示前几次不触发断点。

Action选项中,我们可以选择触发断点时的执行事件,比如这里我加入了播放声音,以及向控制台打印字符串"This is a message to console",同时还会调用调试命令p i,表示输出i的值:

func customDebug() {
for i in 1..<10 {
// 这里加断点
}
}
复制代码

代码运行后的结果是:

(Int) $R8 = 9
This is a message to console
复制代码

如果您运行了demo,还会听到清脆的“叮”的一声。

One More Thing

更多好文敬请关注我和@Martin_wjl共同维护的专题——每周学点Swift,每周五更新几篇精选教程,轻松学习Swift。

几个加速Swift开发的小tip的更多相关文章

  1. iOS——Swift开发中的单例设计模式(摘译,非原创)

    最近在开发一个小的应用,遇到了一些Objective-c上面常用的单例模式,但是swift上面还是有一定区别的,反复倒来倒去发现不能按常理(正常的oc to swift的方式)出牌,因此搜索了一些帖子 ...

  2. 关于《Swift开发指南》背后的那些事

    时间轴(倒叙)2014年8月底在图灵出版社的大力支持下,全球第一本全面.系统.科学的,包含本人多年经验的呕心沥血之作<Swift开发指南>(配有同步视频课程和同步练习)全线重磅推出2014 ...

  3. Swift语言 1小时速学教程

    本文由 张渊杰 (网名寂静)编写 Swift语言 1小时速学教程 写在前面的话 有些人可能想, 呵呵, 1小时学一门语言, 你不是搞笑吧, 我想说, 是的, 完全可以, 就要看你怎么学了 要想在1小时 ...

  4. 转:【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber

    http://www.bubuko.com/infodetail-382485.html 标签:des   class   style   代码   html   使用   问题   文件   数据 ...

  5. 使用Vmware虚拟机部署Swift开发环境之Mac OSX系统安装

    一.使用VMware虚拟机部署Swift开发环境所需工具: Vmware Workstation 10.0虚拟机软件VM安装Mac解锁工具Unlock苹果操作系统(Mac OS X Mavericks ...

  6. swift开发新项目总结

    新项目用swift3.0开发,现在基本一个月,来总结一下遇到的问题及解决方案   1,在确定新项目用swift后,第一个考虑的问题是用纯swift呢?还是用swift跟OC混编      考虑到新项目 ...

  7. 如何用TypeScript开发微信小程序

    微信小程序来了!这个号称干掉传统app的玩意儿虽然目前处于内测阶段,不过目前在应用号的官方文档里已经放出了没有内测号也能使用的模拟器了. 工具和文档可以参考官方文档:https://mp.weixin ...

  8. 35款加速网站开发的 CSS 开发工具

    网络有很很多的 CSS 工具和教程可用,它可以帮助设计人员和开发人员轻松.快速地学习 CSS 技术.这些工具中在高效开发 Web 应用程序中发挥重要作用. 在这篇文章中,我们收集了35个最好的 CSS ...

  9. swift开发多线程篇 - 多线程基础

    swift开发多线程篇 - 多线程基础 iOS 的三种多线程技术 (1)NSThread  使用NSThread对象建立一个线程非常方便 但是!要使用NSThread管理多个线程非常困难,不推荐使用 ...

随机推荐

  1. vscode如何安装eslint插件 代码自动修复

    ESlint:是用来统一JavaScript代码风格的工具,不包含css.html等. 方法和步骤: 通常情况下vue项目都会添加eslint组件,我们可以查看webpack的配置文件package. ...

  2. json.dumps() 和 json.loads()

    转载: https://blog.csdn.net/qinglingls/article/details/96476368

  3. 算法:模拟退火(基于c++程序)

    一 什么是模拟退火算法? 所谓退火,其实是金属冶炼的一个名词.比如加工一把刀,我们通常是把材料加工到很高的一个温度,加以锤炼.之后慢慢的将温度降下来,如果我们降温的控制比较好的话,那么金属里面的原子就 ...

  4. AJ学IOS(07)UI之UITextField代理事件_类似QQ登陆窗口的简单实现

    AJ分享,必须精品 先看效果图: 学习代码 // // NYViewController.m // 05-UITextField事件_UIKit复习 // // Created by apple on ...

  5. 浅谈requests库

    本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 安装 pip install requests # 是requests而不是request(有s的) re ...

  6. 【Java】 Variable 变量

    什么是Variable变量? - 变量是内存中的一个存储区域 - 这个存储区域内的数据允许在同一类型范围内不断变化 - 是程序最基本的存储单元,包含三个要素[变量类型][变量名][存储的值] 为什么需 ...

  7. 高德APP启动耗时剖析与优化实践(iOS篇)

    前言最近高德地图APP完成了一次启动优化专项,超预期将双端启动的耗时都降低了65%以上,iOS在iPhone7上速度达到了400毫秒以内.就像产品们用后说的,快到不习惯.算一下每天为用户省下的时间,还 ...

  8. C#开发BIMFACE系列31 服务端API之模型对比2:获取模型对比状态

    系列目录     [已更新最新开发文章,点击查看详细] 在上一篇<C#开发BIMFACE系列30 服务端API之模型对比1:发起模型对比>中发起了2个模型对比,由于模型对比是在BIMFAC ...

  9. beanshell 常用的内置变量与函数

    官方详细文档:https://github.com/beanshell/beanshell/wiki log:用来记录日志文件 log.info("jmeter"); vars - ...

  10. SringMVC入门程序

    Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架 1.Spring优点 轻量级,简单易学 高效 , 基于请求响应的MVC框架 与Spring兼 ...