我得到了什么作文这个错误问题,怎么解决

我得到这个错误,我不问题,怎么解决_百度知道
我得到这个错误,我不问题,怎么解决
我有更好的答案
得到什么错误了呀?问题要问出来,描述清楚,最好贴图说明,这样别人才能帮你分析,给你提供思路解决!
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何在 Swift 中进行错误处理 - 简书
如何在 Swift 中进行错误处理
作者:Olivier Halligon,,原文日期:
译者:;校对:;定稿:
今天的文章讲解如何在 Swift 中进行错误处理。
说实话,为了配合这个冬季??,我取了一个有趣的文章标题。
译者注:原文标题为 Let it throw, Let it throw! 是模仿冰雪奇缘的主题曲 Let it go ,并且文章的副标题也在模仿冰雪奇缘的经典台词。
Objective-C 以及对应的 NSError
还记得 Objective-C 吗?那时&a href="#fn:nshipster"&1&/a&,官方的方法是通过传入一个 NSError* 的引用进行错误处理。
Objective-C
BOOL ok = [string writeToFile:path
atomically:YES
encoding:NSUTF8StringEncoding
error:&error];
if (!ok) {
NSLog(@“发生了一个错误: %@", error);
那简直是太痛苦了。以至于许多人不想甚至是懒得去检查错误,只是简单的在那里传一个 NULL 。这是很不负责且不安全的行为。
抛出一个错误
Swift 2.0 以后,苹果决定采用一种不同的方式进行错误处理:使用 throw &a href="#fn:not-exception"&2&/a&。
使用 throw 非常的简单:
如果你想创建一个可能出错的函数,用 throws 标记在它的签名处;
如果需要的话,可以在函数中使用 throw someError ;
在调用的地方,你必须明确的在能抛出错误&a href="#fn:why-try"&3&/a&的方法的前面使用 try ;
可以使用 do { … } catch { … } 这样的结构用来捕获并处理错误。
看起来像这样:
// 定义一个可以抛错误的方法…
func someFunctionWhichCanFail(param: Int) throws -& String {
if (param & 0) {
return "somestring"
throw NSError(domain: "MyDomain", code: 500, userInfo: nil)
// … 然后调用这个方法
let result: String = try someFunctionWhichCanFail(-2)
print("success! \(result)")
print("Oops: \(error)")
错误再也阻挡不了我了
你可以看到 someFunctionWitchCanFail 返回了一个普通的 String ,当一切正常的情况下, String 也是其返回值的类型。先考虑最简单的情况(在 do { … } 中的),“通常情况下”可以很方便的调用这个函数去处理没有错误发生的情况。
唯一的这些方法可能会出错的提醒就是try关键字,编译器强制让你把 try 添加到方法调用的位置的前面,否则就像是调用一个无抛出错误的方法。然后,只需要在一个单独的地方(在 catch 里)写错误处理的代码。
要注意的是你可以在 do 代码段中写多于一行的代码(并且 try 可以调用不止一个抛错误的方法)。如果一切顺利的话,将会像预期的那样执行那些方法,但是一旦方法出错就会跳出 do 代码段,进入 catch 处。对于那些有很多潜在错误的大段代码来说,你可以在一个单一的错误路径中处理所有的错误,这也是非常方便的。
NSError 有点挫了
OK,在这个例子下,我们仍然得用 NSError 处理错误,这有点痛苦。用 == 来比较域和错误代码,以及制作一个域和常量代码的列表,只是为了知道我们得到了什么错误以及如何正确的处理。。。哎哟。
但是我们可以解决这个问题!如果用这篇文章里的知识:用 enum 替代 errors,将会怎样?
好吧,有一个好消息,那就是苹果提供了新的错误处理模式。事实上,当一个函数抛出错误时,它可以抛出任何遵从 ErrorType 的错误。 NSError 是其中的类型之一,但是你也可以自己搞一个,苹果也推荐这么做。
最适合 ErrorType 类型的就是 enum 了,如果有需要的话,甚至二者之间可以有关联值。比如:
enum KristoffError : ErrorType {
case ClumsyWayHeWalks
case GrumpyWayHeTalks
case PearShapedSquareShapedWeirdnessOfHisFeet
case NotWashedSince(days: Int)
现在你就可以在一个函数里使用 throw KristoffError.NotWashedSince(days: 3)来抛出错误,然后在调用的地方使用 catch KristoffError.NotWashedSince(let days)来处理这些错误:
func loveKristoff() throws -& Void {
guard daysSinceLastShower == 0 else {
throw KristoffError.NotWashedSince(days: daysSinceLastShower)
try loveKristoff()
catch KristoffError.NotWashedSince(let days) {
print("Ewww, he hasn't had a shower since \(days) days!")
// 所有其他类型的错误
print("I prefer we stay friends")
相比此前,这种方式更容易的捕获错误!
这也让错误拥有了清晰的名字、常量以及关联值。再也没有复杂的 userInfo 了,在 enum 中你可以清楚地看到值的关联,就像如上例子中的 days,并且它只对特定的类型有效(不会对 ClumsyWayHeWalks 中的 days 关联值有效)。
根本拿不回来
当你调用一个正在抛出错误的函数时,抛出的错误就会被调用函数中的 do...catch 捕获。但是如果错误没有被捕获,它就会被传递到上一层。比如:
func doFail() throws -& Void { throw … }
func test() {
try doTheActualCall()
print("Oops")
func doTheActualCall() throws {
try doFail()
这里,当 doFail 被调用时,潜在的错误没有被 doTheActualCall 捕获(没有 do...catch 来捕获它),所以它就被传递到 test() 函数。由于 doTheActualCall 没有捕获任何错误,所以它必须被标记为 throws :即使它不能通过自己抛出错误,但仍能传递。它自己不能处理错误,必须抛出到更高层。
另一方面,test() 在内部捕获所有的错误,所以,即使它调用一个抛出函数(try doTheActualCall()),这个函数抛出的所有的错误都会在 do...catch 块中被捕获。函数 test() 本身不抛出错误,所以调用者也不要知道其内部行为。
隐藏,不要让他们知道
你现在可能很好奇,如何知道方法到底抛出哪种错误。的确,被 throws 标记的函数到底能抛出哪种 ErrorType?它能抛出 KristoffErrors 、JSONErrors 或者其他类型吗?我到底需要捕获哪种呢?
好吧,这的确是个问题。目前,由于一些二进制接口以及弹性问题(resilience concerns)&a href="#fn:resilience"&4&/a&,这还是不可能的。唯一的方式就是用你代码的文档。
但这也是一件好事。比如说,假如你用了两个库,MyLibA中函数 funcA 会抛出 MyLibAError 错误,MyLibB中函数 funcB 会抛出 MyLibBError 错误。
然后你可能想创建你自己的库 MyLibC ,封装之前的两个库,用函数 funcC() 调用 MyLibA.funcA() 和 MyLibB.funcB()。所以,函数 funcC 的结果可能会抛出 MyLibAError 或者 MyLibBError。而且,如果你添加了另一个抽象层,这就变得很糟糕了,会有更多的错误类型被抛出。如果我不得不把它们都列出来,并且调用的地方需要把它们全部捕获,这将会造成一堆冗长的签名和 catch 代码。
别让他们进来,别让他们看见
基于上面的原因,也为了防止你的内部错误超出你的库的作用域,以及为了限制那些必须由用户处理的错误类型的数量,我建议把错误类型的作用域限制在每个抽象层次。
在如上的例子中,你应该抛出 MyLibCErrors 取而代之,而不是让 funcC 直接传递 MyLibAErrors 和 MyLibBErrors。我的建议有如下的两个原因,都是和抽象相关的:
你的用户不应该需要知道你在内部使用哪个库。如果将来的某天,你决定改变你的实现:使用 SomeOtherPopularLibA 替代MyLibA,显然这个库不会抛出相同的错误,你自己的 MyLibC 框架的调用者不需要知道或关心。这就是抽象应该干的事。
调用者不应该需要处理所有的错误。当然你可以捕获那些错误中的一些并且在内部处理:把 MyLibA 抛出的所有错误都暴露给用户是没有意义的,比如一个 FrameworkConfigurationError 错误表明你误用了 MyLibA 框架并且忘了调用它的 setup() 方法,或者是任何不应该由用户做的事情,因为用户根本无能为力。这种错误是你的错误,而不是别人的。
所以,取而代之,你的 funcC 应该很可能捕获所有 MyLibAErrors 和 MyLibBErrors,封装它们为 MyLibCErrors 替代。这样的话,你的框架的使用者不需要知道你在内部使用了什么。你可以在任何时候改变你的内部实现和使用的库,并且你只需要给用户暴露那些他们可能需要关注的错误。
其他资料分享 &a href="#fn:ref"&5&/a&
译者注:原标题为 We finish each others sandwiches,是在模仿冰雪奇缘中王子和公主的对话,表示和其他博主以及读者的一种亲近的关系。
throw 话题和 Swift 2.0 的错误处理模型还有很多东西可讲,我本可以讲一些关于 try? 和 try!,或者关于高阶函数中的 rethrows 关键字。
这里没有时间对每个话题面面俱到了,那会使得我的文章非常长。但是别人有趣的文章将会帮你探索 Swift 错误处理的世界,包括但不限于:
by Rob Napier
by Little Bites of Cocoa
, by Brad Larson
... (别犹豫了,快去评论区分享更多链接吧!)
&a name="fn:nshipster"&&/a&
更多关于在 Objective-C 中错误处理的信息,可以参考这篇文章:。今天的文章是关于 Swift 中的新方式的,所以别在旧事物上花费太多的时间。
&a name="fn:not-exception"&&/a&
尽管它叫 throw ,但是 throw 不是像 Java 或者 C++ 甚至 OC 中的 throw exception。但是使用的方式非常相似,苹果决定保留相同的措辞,所以习惯于 exceptions 的人会感到非常自然。
&a name="fn:why-try"&&/a&
这是编译器强制的,其目的是让你意识到这个函数可能出错,你必须处理潜在的错误。
&a name="fn:resilience"&&/a&
Swift 2.0 还不支持 typed throws,但是有一个关于添加这个特性的讨论,Chris Lattner 解释了 Swift 2 不支持的原因,以及为什么我们需要 Swift 3.0 的弹性模型以获得这个特性。
&a name="#fn:ref"&&/a&
好了,我保证这是我最后一次可耻使用 Frozen(《冰雪奇缘》) 标题了。
本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 。
GitHub脑残粉 | OSI组织成员 | Python | JS | iOS | 译者 | 组织翻译了《The Swift Programming Language》
如果大家觉得这篇文章为你提供了一些有用的信息, 请点个赞_希望我们在 iOS 开发的道路上越走越精彩_作者微博: weibo.com/dorayakitech作者GitHub: github.com/magiclee203 对于错误处理, Objective-C 中已经提供...
本章将会介绍 自动引用计数的工作机制自动引用计数实践类实例之间的循环强引用解决实例之间的循环强引用闭包引起的循环强引用解决闭包引起的循环强引用使用可选链式调用代替强制展开为可选链式调用定义模型类通过可选链式调用访问属性通过可选链式调用调用方法通过可选链式调用访问下标连接多层...
Error handlingis the process of responding to and recovering from error conditions in your program. Swift provides first-class support fo...
Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽。今天的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中是如何抛出异常的。在编译型语言中,错误一般分为编译错误和运行时错误。我们平时在代码中处理的错误为运行时错误...
表示与抛出错误 In Swift, errors are represented by values of types that conform to the Error protocol. This empty protocol indicates that a type...
locate命令是我在Linux下最常用的软件之一,因为找文件特别的快,又比find指令用起来简单:locate + 文件名 刚转到Mac下时候,也试了下locate,结果和Linux下一样,提示需要更新数据库。试着执行:sudo updatedb 命令没找到,后来才发现,...
曾经以前习以为常的,到了后来却让自己拼命守护。 今年中秋刚刚过去。相信很多人跟我一样刚刚从家里的温存出来,又要面对辛苦的工作。整日的奔波在这个世界,或者去完成自己的学业。 你有多不想离开家?在外面就要有多努力,你要记得在你想家的时候,自己为什么要离开那个幸福的地方。因为,你...
因为从事英语教育行业,所以是否从娃娃抓起比较有心得。 首先,从英语口音的角度来说,从小学习英语的口音会比成人好听多,更加纯正。也许成人后天受到母语的影响,有些音调没有小孩子的好听。举个例子,朋友家的小孩从小就是菲佣照顾,菲佣讲的是英语。家里的小孩也从很小沉浸在英语环境当中,...+快捷按钮 >>
>> 帖子发帖时间: 日 11:021#主题:爱上你的错误错误,失误,磕磕拌拌以及各种各样的问题都是做音乐的一部分。你要确信或者否定他们,那将是你成长为一个音乐家多必须经历的。有时一个细节错误会将你堕入深渊,让我们来找到最终解决错误的办法来帮助进步。
首先,错误在我心理占据一个很特殊的位置,因为我本身就是错误!我不想在这里涉及我的太多隐私,但是我的出生的确不是制造我的人所愿意的。我不是他们想要的,但是我真的存在了,现在他们很高兴这个“错误”。
言归正传,那么音乐上的错误是什么呢?我们能不能假设这些错误通过某种方式帮助我们演奏?
我先来问你这个:你曾经通过一个错误发现了新的声音了吗?或者当你试图弹一个特殊的和弦却结束在另一个上面,然后那种意想不到的声音让你惊呼:“嘿,这可真酷,再来一次!”
我知道你经历过这些,如果你已经弹了相当长的时间。如果你从“错误”中制造出了如此COOL的声响,你就开始感激他们了。事实上,你开始看到的那些错误应得到更多肯定的正确的名字。或许我们该把“错误”叫成是:“事物”或者“选项”。换句话说就是“补充”。“我为什么要接着“错”,比如用C#m来取代D major”,你可能会问“如果我继续在这两者中选择选择将会发生什么?我接着这么干会得到更新的声响吗?”
首先说,这可不容易。很多情况下我们碰到的错误是很糟糕的,有些甚至必须马上改正。我们知道错误有如精神上的蟑螂,必须毁灭他。
如果你致力于一首你喜欢的歌,但你几乎每次都在特殊的地方犯错,这将是很难解决的问题,当然,你要继续下去,如果你真的想把这歌弹的很好。你在下一次弹#9而不是9之前做深呼吸,并且说:“好了。错误先生,我感激你的存在。我知道你想让我注意你,你到底想让我怎么弹?”那么就请花点时间去研究,“错误”将会给你答案。你将会发现,通过科学的方法解决了问题,错误自然会消失。
记录中的错误
当你练习过记录后,其中产生的错误将会产生很高的价值!我曾做过一个关于记录的练习软件,那是一张有大约10个爵士调的CD,并附带一张卡片,卡片上面有几乎每首歌的调。我记下了CD里每首歌的调,然后去和卡片上的答案对。问题不是我的准确性,我做的很不错,对了85%。问题在于我得到了很多有用的东西,这比那15%的错误太强了。所以我不必去再面对那些错误了。
那是不可多得的,我确信那张CD里的卡片不是为培养你精神上的学习。我需要一种新的态度并且我做到了,我采取的态度将我的错误们单一的变成创作的方式,听起来不错的。和那张卡片比较我的记录绝对是有益的,但并不是完全对学习音乐。接下来的部分是找出那些错误并用到音乐中,去和那些正确的比较看看哪些声响效果更好。至今,记录对我是一种乐趣。
现在,我想把这些错误行为做个总结:生活本身就会导致一连串的错误,进化论告诉我们元素会变成适合他们生存环境中的一部分。我不想干涉任何人的宗教信仰,我只是想让大家有更多新的观点去面对你音乐中的错误。
记住:错误,失误,磕磕绊绊和各种问题是生活,学习以及创作音乐的一部分。重要的是看你怎么对待以及你会有些什么反应---错误本身不会阻止你成长为一个吉他演奏家,而对错误作出不正确的反应才会导致你练习的失败。
[ 本帖最后由 生如夏花 于
16:13 编辑 ]分享:1/1页提示:登录后您才能发表回复!登录注册为彼岸用户手机号:手机验证码:获取手机验证码昵称:密码:&
我同意&注&&册已注册?便捷登录:登录彼岸吉他网便捷登录:查看地图Ignore this point is wrong
Ignore this is wrong
Neglect this point is wrong
有一点错误也是很小的。
If they have made mistakes, they were minor ones.
在摩纳哥,如果你犯了一点错误就要付出代价。
In Monaco, you make a little mistake and you pay the price.
到底是应该做得快但是可能会有错误, 还是应该做得慢一点错误也没有。
People should work quickly and risk making mistakes or should work slowly and make sure that everything is correct?
I've learned that with high probability, the error is not in the first part of the program.
我从这一点得到了什么?,我得到的是错误有很大的可能。
Again it's important not to misunderstand that question.
不要错误理解这个问题,这一点很重要。
He made spelling mistakes, which you can see.
他时常犯拼写错误,你们可以看到这一点
$firstVoiceSent
- 来自原声例句
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!

我要回帖

更多关于 我得到了表扬 的文章

 

随机推荐