戴铭
戴铭
```swift let s1 = """ one1, two2, three3. """ let sn1 = Scanner(string: s1) while !sn1.isAtEnd { if let r1 = sn1.scanUpToCharacters(from: .newlines) { print(r1 as String) } } ///...
Date 的基本用法如下: ```swift let now = Date() // Date 转 时间戳 let interval = now.timeIntervalSince1970 // 时间戳 let df = DateFormatter() df.dateFormat = "yyyy 年 MM 月 dd 日 HH:mm:ss"...
文件的一些基本操作的代码如下: ```swift let path1 = "/Users/mingdai/Downloads/1.html" let path2 = "/Users/mingdai/Documents/GitHub/" let u1 = URL(string: path1) do { // 写入 let url1 = try FileManager.default.url(for: .itemReplacementDirectory, in: .userDomainMask, appropriateFor: u1, create:...
数据压缩和解压 ```swift // 对数据的压缩 let d1 = "看看能够压缩多少?看看能够压缩多少?看看能够压缩多少?看看能够压缩多少?看看能够压缩多少?看看能够压缩多少?看看能够压缩多少?看看能够压缩多少?看看能够压缩多少?看看能够压缩多少?看看能够压缩多少?".data(using: .utf8)! as NSData print("ori \(d1.count) bytes") do { /// 压缩算法 /// * lz4 /// * lzma /// * zlib /// * lzfse...
标准库里的物理量,在这个文档里有详细列出,包括角度、平方米等。 ```swift // 参考:https://developer.apple.com/documentation/foundation/nsdimension let m1 = Measurement(value: 1, unit: UnitLength.kilometers) let m2 = m1.converted(to: .meters) // 千米转米 print(m2) // 1000.0 m // 度量值转为本地化的值 let mf = MeasurementFormatter() mf.locale =...
使用标准库的格式来描述不同场景的情况可以不用去考虑由于不同地区的区别,这些在标准库里就可以自动完成了。 描述两个时间之间相差多长时间 ```swift // 计算两个时间之间相差多少时间,支持多种语言字符串 let d1 = Date().timeIntervalSince1970 - 60 * 60 * 24 let f1 = RelativeDateTimeFormatter() f1.dateTimeStyle = .named f1.formattingContext = .beginningOfSentence f1.locale = Locale(identifier: "zh_Hans_CN") let...
WwogICAgewogICAgICAgICJuYW1lIjoi5a6Y5pa5IiwKICAgICAgICAiaWQiOjIxMTExMTE5NDgsCiAgICAgICAgInJlcG9zIjpbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ImFwcGxlL3N3aWZ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJhcHBsZS9zd2lmdC1ldm9sdXRpb24iLAogICAgICAgICAgICAgICAgImRlcyI6IuaPkOahiCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoibGx2bS9sbHZtLXByb2plY3QiLAogICAgICAgICAgICAgICAgImRlcyI6Iue8luivkeWZqCIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICAgIm5hbWUiOiLmlrDpspzkuosiLAogICAgICAgICJpZCI6MjExMTEyMTU0NywKICAgICAgICAicmVwb3MiOlsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoiU3dpZnRPbGREcml2ZXIvaU9TLVdlZWtseSIsCiAgICAgICAgICAgICAgICAiZGVzIjoi6ICB5Y+45py6IGlPUyDlkajmiqUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6Im1hdHRlb2NyaXBwYS9hd2Vzb21lLXN3aWZ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJLd2FpQXBwVGVhbS9Td2lmdFBhbXBobGV0QXBwIiwKICAgICAgICAgICAgICAgICJkZXMiOiLmiLTpk63nmoQgU3dpZnQg5bCP5YaM5a2QIgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6IuWwgeijheaYk+eUqOWKn+iDvSIsCiAgICAgICAgImlkIjoyMTExMjMxMTM3LAogICAgICAgICJyZXBvcyI6WwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJTd2lmdGVyU3dpZnQvU3dpZnRlclN3aWZ0IiwKICAgICAgICAgICAgICAgICJkZXMiOiJIYW5keSBTd2lmdCBleHRlbnNpb25zIgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6Iue9kee7nCIsCiAgICAgICAgImlkIjoyMTExMTIxMDUzLAogICAgICAgICJyZXBvcyI6WwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJBbGFtb2ZpcmUvQWxhbW9maXJlIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJzb2NrZXRpby9zb2NrZXQuaW8tY2xpZW50LXN3aWZ0IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6IuWbvueJhyIsCiAgICAgICAgImlkIjoyMTExMTIyMDEwLAogICAgICAgICJyZXBvcyI6WwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJvbmV2Y2F0L0tpbmdmaXNoZXIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ImtlYW4vTnVrZSIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICAgIm5hbWUiOiLmloflrZflpITnkIYiLAogICAgICAgICJpZCI6MjExMTE3MTk1OCwKICAgICAgICAicmVwb3MiOlsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoiZ29uemFsZXpyZWFsL01hcmtkb3duVUkiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjoi5Yqo55S7IiwKICAgICAgICAiaWQiOjIxMTExMTE5NDYsCiAgICAgICAgInJlcG9zIjpbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6InJlY2hlcnN0L2thdnNvZnQtc3dpZnR1aS1hbmltYXRpb25zIgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6IuaMgeS5heWMluWtmOWCqCIsCiAgICAgICAgImlkIjoyMTExMjMxMzA4LAogICAgICAgICJyZXBvcyI6WwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJzdGVwaGVuY2VsaXMvU1FMaXRlLnN3aWZ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJncm91ZS9HUkRCLnN3aWZ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJyZWFsbS9yZWFsbS1jb2NvYSIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICAgIm5hbWUiOiLnvJbnqIvojIPlvI8iLAogICAgICAgICJpZCI6MjExMTIzMTEyMCwKICAgICAgICAicmVwb3MiOlsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoiUmVhY3RpdmVYL1J4U3dpZnQiLAogICAgICAgICAgICAgICAgImRlcyI6IuWHveaVsOWTjeW6lOW8j+e8lueoiyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoicG9pbnRmcmVlY28vc3dpZnQtY29tcG9zYWJsZS1hcmNoaXRlY3R1cmUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6Im9ubXl3YXkxMzMvYXdlc29tZS1pb3MtYXJjaGl0ZWN0dXJlIgogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICAgIm5hbWUiOiLot6/nlLEiLAogICAgICAgICJpZCI6MjExMTE3MTQwOCwKICAgICAgICAicmVwb3MiOlsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoicG9pbnRmcmVlY28vc3dpZnR1aS1uYXZpZ2F0aW9uIgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6IumdmeaAgeajgOafpSIsCiAgICAgICAgImlkIjoyMTExMjMxMTE3LAogICAgICAgICJyZXBvcyI6WwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJyZWFsbS9Td2lmdExpbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjoi57O757uf6IO95YqbIiwKICAgICAgICAiaWQiOjIxMTEyMzExMjIsCiAgICAgICAgInJlcG9zIjpbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6Imtpc2hpa2F3YWthdHN1bWkvS2V5Y2hhaW5BY2Nlc3MiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjoi5o6l5Y+jIiwKICAgICAgICAiaWQiOjIxMTEyMTIxMzMsCiAgICAgICAgInJlcG9zIjpbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6Ik9BdXRoU3dpZnQvT0F1dGhTd2lmdCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoicDIvT0F1dGgyIgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6Im1hY09T56iL5bqPIiwKICAgICAgICAiaWQiOjIxMTExMjEwNDYsCiAgICAgICAgInJlcG9zIjpbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6InNlcmhpaS1sb25kYXIvb3Blbi1zb3VyY2UtbWFjLW9zLWFwcHMiLAogICAgICAgICAgICAgICAgImRlcyI6IuW8gOa6kCBtYWNPUyDnqIvluo/lkIjpm4YiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6IlJhbmNoZXJvLVNvZnR3YXJlL05ldE5ld3NXaXJlIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJvdmVydGFrZS9UZWxlZ3JhbVN3aWZ0IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6IuaAp+iDveWSjOW3peeoi+aehOW7uiIsCiAgICAgICAgImlkIjoyMTEyMjQxNzUwLAogICAgICAgICJyZXBvcyI6WwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJ0dWlzdC90dWlzdCIsCiAgICAgICAgICAgICAgICAiZGVzIjoi5Yib5bu65ZKM57u05oqkIFhjb2RlIHByb2plY3RzIOaWh+S7tiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoic3dpZnQtc2VydmVyL3ZzY29kZS1zd2lmdCIsCiAgICAgICAgICAgICAgICAiZGVzIjoiVlNDb2RlIOeahCBTd2lmdCDmianlsZUiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjoi5Zu+5b2iIiwKICAgICAgICAiaWQiOjIyMDEwNTE4MzYsCiAgICAgICAgInJlcG9zIjpbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6IndpbGxkYWxlL1N3aWZ0VUlDaGFydHMiLAogICAgICAgICAgICAgICAgImRlcyI6IueUqOS6jlN3aWZ0VUnnmoTlm77ooajnu5jlm77lupMiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjoi6Z+z6KeG6aKRIiwKICAgICAgICAiaWQiOjIxMTEyNDEyMDgsCiAgICAgICAgInJlcG9zIjpbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ImlpbmEvaWluYSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoic2hvZ280NDA1L0hhaXNoaW5LaXQuc3dpZnQiLAogICAgICAgICAgICAgICAgImRlcyI6IlJUTVAsIEhMUyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoiQXVkaW9LaXQvQXVkaW9LaXQiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjoi5pyN5Yqh5ZmoIiwKICAgICAgICAiaWQiOjIxMTIwNzE4MjYsCiAgICAgICAgInJlcG9zIjpbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6InZhcG9yL3ZhcG9yIgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6IuW+heWIhuexuyIsCiAgICAgICAgImlkIjoyMTExMTIyMzEwLAogICAgICAgICJyZXBvcyI6WwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJTd2lmdEdHVGVhbS90aGUtc3dpZnQtcHJvZ3JhbW1pbmctbGFuZ3VhZ2UtaW4tY2hpbmVzZSIsCiAgICAgICAgICAgICAgICAiZGVzIjoi5Lit5paH54mIIEFwcGxlIOWumOaWuSBTd2lmdCDmlZnnqIsiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9Cl0K
WwogICAgewogICAgICAgICJuYW1lIjoiU3dpZnTlrpjmlrkiLAogICAgICAgICJpZCI6MjExMTE2MTI1NSwKICAgICAgICAidXNlcnMiOlsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoidGtyZW1lbmVrIiwKICAgICAgICAgICAgICAgICJkZXMiOiJTd2lmdCBkaXJlY3RvciIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoiRG91Z0dyZWdvciIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoibWlrZWFzaCIsCiAgICAgICAgICAgICAgICAiZGVzIjogIkZyaWRheSBRJkEiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjoi56S+5Yy6IiwKICAgICAgICAiaWQiOjIxMTExNDEwNTMsCiAgICAgICAgInVzZXJzIjpbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6Im9uZXZjYXQiLAogICAgICAgICAgICAgICAgImRlcyI6IuWWteelniIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoiRGlhblFLIiwKICAgICAgICAgICAgICAgICJkZXMiOiLpnZvpnZIgLSBTd2lmdEdH57+76K+R57uEIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJrZWFuIiwKICAgICAgICAgICAgICAgICJkZXMiOiJOdWtl44CBUHVsc2UiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6InN0ZXBoZW5jZWxpcyIsCiAgICAgICAgICAgICAgICAiZGVzIjoiUG9pbnQtRnJlZSAmIFNRTGl0ZS5zd2lmdCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoiaWJpcmVtZSIsCiAgICAgICAgICAgICAgICAiZGVzIjoiWVlEUyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoibWF0dHQiLAogICAgICAgICAgICAgICAgImRlcyI6Ik5TSGlwc3RlciIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoic2luZHJlc29yaHVzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJldGhhbmh1YW5nMTMiLAogICAgICAgICAgICAgICAgImRlcyI6IjEzIC0gW3dlYWsgc2VsZl3mkq3lrqIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6Ikt5bGUtWWUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6Im1pbmcxMDE2IiwKICAgICAgICAgICAgICAgICJkZXMiOiLmiLTpk60iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6Im14Y2wiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ImxremhhbyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoiaW5zaWRlZ3VpIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJqb2hubm8xOTYyIiwKICAgICAgICAgICAgICAgICJkZXMiOiJJbmplY3Rpb25JSUkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6IndpZ2dpbmciLAogICAgICAgICAgICAgICAgImRlcyI6IkJhY2sgdG8gdGhlIE1hYyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoiRGltaWxsaWFuIiwKICAgICAgICAgICAgICAgICJkZXMiOiJNb3ZpZVN3aWZ0VUkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ImtyenlzenRvZnphYmxvY2tpIiwKICAgICAgICAgICAgICAgICJkZXMiOiLlhYPnvJbnqIsgU291cmNlcnkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6Im9ubXl3YXkxMzMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6InBvZmF0IiwKICAgICAgICAgICAgICAgICJkZXMiOiJQb2ZhdCAtIFt3ZWFrIHNlbGZd5pKt5a6iIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiaWQiOiJtZWNpZCIsCiAgICAgICAgICAgICAgICAiZGVzIjoiU3dpZnQgd2l0aCBNYWppZCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoiaGViZXJ0aWFsbWVpZGEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6Imt5bGVmIiwKICAgICAgICAgICAgICAgICJkZXMiOiJDb21tYW5kZXIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6Impvc2hhYmVyIiwKICAgICAgICAgICAgICAgICJkZXMiOiJhdCBHaXRIdWIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJpZCI6ImFzaGZ1cnJvdyIsCiAgICAgICAgICAgICAgICAiZGVzIjoiTW95YSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImlkIjoiamVzc2VzcXVpcmVzIgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfQpdCg==
Swift的枚举有类的一些特性,比如计算属性、实例方法、扩展、遵循协议等等。 ```swift enum E1:String, CaseIterable { case e1, e2 = "12" } // 关联值 enum E2 { case e1([String]) case e2(Int) } let e1 = E2.e1(["one","two"]) let e2 = E2.e2(3)...
闭包
闭包也可以叫做 lambda,是匿名函数,对应 OC 的 block。 ```swift let a1 = [1,3,2].sorted(by: { (l: Int, r: Int) -> Bool in return l < r }) // 如果闭包是唯一的参数并在表达式最后可以使用结尾闭包语法,写法简化为 let a2 = [1,3,2].sorted {...