1. debug模式下打印release模式下不打印.
#if DEBUG
print("debugq情况下才打印")
#endif
2.断言
强制程序员调用某个方法的时候,传入合适的参数. 否则在debug模式下是会奔溃的.
func convertToKelvin(_ celsius: Double) -> Double {
assert(celsius > 273.15,"输入的摄氏温度不能低于绝对零度")// debug 模式下 ()条件不成立就崩溃.提醒程序员,输入参数必须满足条件
return 100.0
}
/*2019-08-20 14:09:06.256974+0800 TestSwift2[17029:433405] Assertion failed: 输入的摄氏温度不能低于绝对零度: file /Users/gti/Desktop/TestSwift2/TestSwift2/ViewController.swift, line 31*/
3.随机数终极版本
随机数是编程中大概率需要用到的. arc4random 是一个非常优秀的随机数算法,并且在Swift 中也可以使用. 它会返回给我们一个任意整数. but 有时候在iPhone 5或者以下的设备中,程序会崩溃. (好在iPhone 5这样的设备已经逐渐被淘汰了) 崩溃的啥原因是32位,64的缘故. int在32 位的硬件里就是int32. 同理int64. 优化代码如下:
func make15() {
for _ in 0...100 {
let range = Range<Int>(1...6)
print(random(in: range))
}
}
func random(in range: Range<Int>) -> Int {
let count = UInt32(range.endIndex - range.startIndex)
return Int(arc4random_uniform(count)) + range.startIndex
}
4. 遍历数组,同时得到index和value.-----enumerated
for(idx, value) in [1,2,3,4,5].enumerated() {
print("idx:\(idx)---value:\(value)")
}
5.打印格式的扩展
extension Double {
func format(_ f: String) -> String {
return String(format: "%\(f)f", self)
}
}
let b = 1.22323
//let format = String(format: "%0.2f", b) //1.22
print(b.format("0.3"))// 1.223
6. 隔离代码,使代码层次清晰
// 方法1
do {
print("隔离代码啊")
}
//方法2
let nameLabel: UILabel = {
let label = UILabel(frame: CGRect(x: 150, y: 30, width: 200, height: 40))
label.textColor = .blue
label.text = "隔离代码啊"
return label
}()
view.addSubview(nameLabel)
7.分区
// MARK: 这里讲的是where
// FIXME: 需要修改的地方
效果:
8. where forEach
let name = ["王小二","张三","李四","王二小"]
name.forEach {
switch $0 {
case let x where x.hasPrefix("王"):
print("\(x)是笔者本家")
default:
print("你好\($0)")
}
}
/*打印
王小二是笔者本家
你好张三
你好李四
王二小是笔者本家
*/
9. for in 的用法
for index in 0...3 {
print(index)
}
let test = "helLo"
let interval = "a"..."z"
for c in test {
if !interval.contains(String(c)) {
print("\(c) 不是小写字母")
}
}
/*打印
0
1
2
3
L 不是小写字母
*/