首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

了解 Swift 的 Result 类型

一开始可能感觉语法有点奇怪,这就是为什么我要缓慢地给您热身的原因——这个东西确实很有用,但是如果您深入一探,可能会感觉就像倒退了一步。...同样,我们将使返回.badURL错误,以使事情变得简单。...但是,如果稍后使用它,则可能创建的闭包已被销毁并且不再存在于内存中,在这种情况下,闭包也将被销毁并且无法再运行。 为了解决这个问题,Swift让我们将闭包参数标记为@escaping,这意味着: ?...如果我们以某种方式无法获取数据或出现错误,则我们将调用 completion(.failure(.unknown))。 唯一的新事物是如何将Data实例转换为字符串。...\ 幕后,Result实际上是一个具有关联值的枚举,Swift具有非常特殊的语法来处理这些值:我们可以打开Result,并编写诸如case .success(let str)之类的情况表示“如果这是成功后

2.5K20
您找到你想要的搜索结果了吗?
是的
没有找到

iOS安全基础之钥匙串与哈希

为什么安全是苹果的重中之重? 深入了解代码之前,你应该明白为什么你的应用程序需要强有力的安全保证。如果你要存储比较隐私的用户数据,如电子邮件,密码或银行帐户信息,则应用程序的安全性尤其重要。...为什么要使用钥匙串来作为安全解决方案?难道仅仅是因为UserDefaults中不存储base-64编码的用户密码吗?当然不是!...最后,Settings.currentUser由存储UserDefaults中的 user设置的。 不过,方法并不是最完美的,因为直接存储用户密码并不是最安全的做法。...注意:苹果的CommonCrypto框架为你提供了许多有用的哈希函数,但在Swift中与它进行交互并不容易。这就是为什么我们选CryptoSwift库的原因。...我们很多博客或者网站留言,评论的时候会看到有的人头像很酷很个性化,但是这个博客和网站本身并没有提供设置头像的功能,感觉有点神奇,那么是怎么做到的呢?其实这是使用了Gravatar。

2.7K20

用 SwiftUI 实现 AI 聊天对话 app - iChatGPT

目前是根据 A-kirami/nonebot-plugin-chatgpt 项目中的 python 实现,用 Swift 重写了一次,而 ChatGPT 登陆暂时没有实现,大家可以提 pr。...最后封装的网络请求类 ChatGPT.swift class Chatbot {let apUrl = "https://chat.openai.com/"let sessionTokenKey = "...例如一个回答是 "我无法确定全球当前的人口数量,因为我没有浏览网页的能力。"...Gravatar 的概念首先是在国外的独立 WordPress 博客中兴起的,当你到任何一个支持Gravatar的网站留言时,这个网站都会根据你所提供的Email地址为你显示出匹配的头像。...当然,这个头像,是需要你事先到 Gravatar 的网站注册并上传的,否则,在这个网站上,就只会显示成一个默认的头像。

1.3K20

Xcode URLSession --

. HTTP load failed, 0/0 bytes (error code: -1004 1:61) 版本信息: Xcode:11.1 Swift:5 iOS:13.1 问题描述 首先确认一下你是否是和我一样的情形...使用URLSession发起网络请求导致的 实体机测试,而非模拟机 虚拟机正常,但是实体机就会错误 后台服务本地也可能不是 解决方案 如果你符合上面的情形,那你应该适合我一样的新手,其实这个问题和Xcode...,iOS版本甚至和iOS开发没有一点关系......这是Http的事情,说的简单一点就是,你把url地址写错了......而且大概率写的是localhost或者127.0.0.1 为什么尼?...我们看一下问题情形:虚拟机正常,但是实体机发生错误,为什么?因为虚拟机和Xcode一台设备上,所以127.0.0.1能指向同设备上的后台服务,但是实体机尼?...他们并不共享同一个IP,他们大概率同一个局域网下面,所以只需要把url替换为Mac局域网的ip地址,问题就会解决了........

2.6K20

面向协议编程与 Cocoa 的邂逅 (下)

日常开发中使用协议 WWDC 2015 POP 方面有一个非常优秀的主题演讲:#408 Protocol-Oriented Programming in Swift[4]。...Talk is cheap, show me the code. 1.1.1 初步实现 首先,我们想要做的事情是从一个 API 请求一个 JSON,然后将它转换为 Swift 中可用的实例。...最后 send方法被绑死URLSession 的实现上,而且是作为 Request 的一部分存在。...这是很不合理的,因为这意味着我们无法不更改请求的情况下更新发送请求的方式,它们被耦合在了一起。...但是实际开发的时候你可能会无法一开始就写出合适的协议定义。建议可以像我 demo 中做的那样,先“粗略”地进行定义,然后通过不断重构来得到一个最终的版本。

69620

Swift 项目中涉及到 JSONDecoder,网络请求,泛型协议式编程的一些记录和想法

前言 最近项目开发一直使用 swift,因为 HTN 项目最近会有另外一位同事加入,所以打算对最近涉及到的一些技术和自己的一些想法做个记录,同时也能够方便同事熟悉代码。...对于来自网络的 JSON 结构化数据的处理,可以使用 JSONDecoder 这个苹果自己提供的字符串转模型类,这个类是 Swift 4 的 Fundation 模块里提供的,可以Swift 源码目录...实现这个功能代码就在上文提到的 Swift 源码目录 swift/stdlib/public/SDK/Fundation/ 下的 JSONEncoder.swift 文件,如果不想把源码下下来也可以...接下内容之前可以考虑这样一个问题,为什么在做前面的判断时为什么不用 public func formIndex(after i: inout String.Index) 这个方法,after 不是代表从开始往后移动遍历么... Swift 里就是 Alamofire GitHub - Alamofire/Alamofire: Elegant HTTP Networking in Swift

6.5K20

iOS AFNetworking 源码阅读二

sync,因为是想要主线程等在这,等执行完,返回,因为必须执行完dataTask才有数据,传值才有意义。...代理7 /* task完成之后的回调,成功和失败都会回调这里 函数讨论: 注意这里的error不会报告服务期端的error,他表示的是客户端这边的eroor,比如无法解析hostname或者连不上...AFURLSessionManager都只是做一些公共的处理。 代理11 /* 当task接收到所有期望的数据后,session会调用代理方法。...nullable NSData *)data error:(NSError * _Nullable __autoreleasing *)error NS_SWIFT_NOTHROW...; @end 原来就是这么一个协议方法,各种类型的responseSerializer类,都是遵守这个协议方法,实现了一个把我们请求到的data转换为我们需要的类型的数据的方法。

1.7K20

干货 | 深入浅出Apple响应式框架Combine

一、引言 Combine.framework 是Apple2019 WWDC 上基于Swift推出的函数响应框架(Functional Reactive Programming),支持Apple全平台的操作系统...2.4 Operators 响应式编程的核心其实是Publishers各种转换,为什么要有操作符?...我们通过URLSession内置的dataPublisher发送网络请求解析来说明用法,目的是为了说明Combine中的异步API以及异步API中如何使用Operator。代码示例如下图: ?...3.1.1 自定义Subscription 创建Plublisher之前,我们先创建Subscrption,因为Subscription是连接发布者和订阅者的中介者,没有它Combine事件流无法驱动...虽然Combine本身是闭源的,但CombineFoundation层的代码确是开源的,有兴趣的读者可以参考Swift源码中Publishers+URLSession.swift和Publishers

3.5K31

Swift基础语法(四)

Result Swift5之前,我们一般是采用上面的方式来处理异常,Swift5之后,苹果推出了一个Result枚举,Result枚举可以更加优雅地去处理异常。...显然,data和error是互斥的,不存在data和error同时为nil,或者同时非nil的情况,但是编译器是无法确认此事实的。...where关键字Swift中非常强大,那么Swift中哪些地方用到了这个关键字呢?...Apple给我们做好了桥接工作,不过,OC项目中调用Swift,与Swift项目中调用OC,处理的方式是不一样的。...为什么需要命名空间 简而言之就是一句话:为了避免命名上的冲突。 开发中,尤其是多模块开发中,很难保证模块之间的类名不会重复。为了保证不同模块下同名的类可以正常使用而不报错,此时就需要命名空间了。

3.8K20

JSONEncoder 基础类型编码失败的解决方法

JSONEncoder Swift 中还是非常常用的,最近项目中有需要将APP数据转换为JSON格式之后,再发送给服务器的需求,测试过程中,然后报了如下错误: invalidValue(Optional...let data = try JSONEncoder().encode(self) modelJson = String(data: data, encoding: .utf8...代码跑起来打印如下: encoded json: 1 encoded json: {"name":"韦弦zhy","age":18} 问题开始 当开始兼容性测试时,iOS 13 系统以下,业务突然完全无法实现...encoded json: {"name":"韦弦zhy","age":18} 后续测试发现:只有类似 User 这样的结构体或类才能正常编码,而基础类型 Int , Double, String 等,均无法编码成功...open func encode(_ value: T) throws -> Data where T : Encodable } Swift JSONEncoder 的源码中也翻了翻,也是没找到关于

74910

Swift 周报 第三十九期

周报精选 新闻和社区:卖不动了 iPhone 美国市场销量或陷入停滞 提案:导入声明上使用访问级别修饰符 Swift 论坛:讨论从头开始的基本 HTTP 客户端 推荐博文:用示例解释了 Swift...解决方法是将其转换为具有单元素最近使用的缓存的对数算法。]...用户仍然可以将字符串文字直接传递给宏调用,但他们无法执行任何接近但不是文字的操作,例如 “hello”+“world”。...但问题是 cleint 退出,打印未连接 -1 我该如何解决问题并成功请求? 回答 从 Swift 正确使用 BSD 套接字是一个严峻的挑战。...需要明确的是,ATS 仅适用于 URLSession 及以上版本。低级 API,如网络框架和 BSD 套接字,只是忽略 ATS。

20820

Swift 周报 第三十四期

而且,很多时候,多行表达式 Unicode 数学符号中根本无法表示。例如,Unicode 中没有上标希腊字母。矩阵也是无法表示的。...讨论为什么将类型元数据转换为 AnyObject 后,最后会调用 destroy_value 以销毁 AnyObject?[12] 此帖子可能看起来有点抽象和学术,但它源自一个真实的问题!...当将一个类转换为 AnyObject 时,编译器可以选择保留它,但它选择不这样做,因为它知道类是永久存在的,因此可以通过不执行操作来节省代码大小和运行时间。 这两个局部推理的结果导致了遇到的问题。...苹果平台上,系统的 HTTP 实现通过 Foundation 框架中的 URLSession API 进行暴露。而对于 Swift 服务器项目,推荐使用 SwiftNIO 实现 HTTP。.../66406/1 [12] 为什么将类型元数据转换为 AnyObject 后,最后会调用 destroy_value 以销毁 AnyObject?

16040

关于 iOS 10 中 ATS 的问题

iOS 9 和 OS X 10.11 中,默认情况下非 HTTPS 的网络访问是被禁止的。...你依然可以添加NSAllowsArbitraryLoads为YES来禁用 ATS,不过如果你这么做的话,需要在提交 app 时进行说明,为什么需要访问非 HTTPS 内容。...如果访问的是自己的服务器的话,可能这个理由会无法通过。 对于网页浏览和视频播放的行为,iOS 10 中新加入了NSAllowsArbitraryLoadsInWebContent键。...关于UIWebView是否也可以NSAllowsArbitraryLoadsInWebContent为YES时访问 HTTP,Apple 内部似乎也争论,但是个人认为是时候淘汰UIWebView了。...如果没有特殊的什么需求的话,尽早将UIWebView全部换为WkWebView会是明智的选择。 不得不说,Apple 使用自己现在的强势地位,推动技术进步上的做的努力是有目共睹的。

2.1K20

NSURLSession与NSURLConnection区别

无法修改默认的连接行为  * 身份验证的能力有限  * 任务在后台时无法上传和下载  */ + (NSURLSession *)sharedSession; 2.自定义 Session 对象 /...- (void)suspend; 暂停任务方法,手动调用会暂停当前任务,再次开启任务时,会从紧接上次任务开始,会面会说到如何暂停任务再开启任务。 - (void)cancel; 取消任务。...NSURLSessionTask还有个属性,@property (readonly) NSURLSessionTaskState state;属性标识当前任务的状态,枚举类型 typedef NS_ENUM...myRequestData,用来放入http  body     NSMutableData *myRequestData = [NSMutableData data];     //将body字符串转化为UTF8...人家的库为什么好用,说白了就是各种情况都考虑到了。所有我们要学的还是人家的编程思想。接下来,我会做一个专题,研究一下各大平常使用到的库,它们到底牛在哪里,敬请阅读!

1.4K60

iOS之深入解析Xcode 13正式版发布的40个新特性

Xcode 13 中的 Swift 语法高亮显示是即时且无闪烁的,无论是文件之间进行编辑还是导航; 即使您的代码不完整或您的项目无法编译,Swift Jump to Definition 现在也能提供更具弹性的体验...您可以使用购买选项来确定如果 App Store 店面交易期间发生变化,交易是否继续。如果未添加选项,则默认为 true。...三十三、iCloud iCloud Private Relay 将作为公开测试版发布,以收集更多反馈并提高网站兼容性。...三十四、Logging 来自 Swift 的 os_signpost(_:dso:log:name:signpostID:) 是所有平台上框架操作系统的一部分 三十五、Networking URLSession...URLSession 现在包括异步函数。 三十六、隐私 要下载应用隐私报告中显示应用内容的文件,可以选择设置 > 隐私 > 记录应用活动。

8.6K40
领券