草庐IT

swift - 强制解包的目的

coder 2023-09-05 原文

在 swift 文档中,你可以找到这个:

if convertedNumber != nil {
    println("convertedNumber has an integer value of \(convertedNumber!).")
}
// prints "convertedNumber has an integer value of 123." 

有了这个解释

Once you’re sure that the optional does contain a value, you can access its underlying value by adding an exclamation mark (!) to the end of the optional’s name. The exclamation mark effectively says, “I know that this optional definitely has a value; please use it.” This is known as forced unwrapping of the optional’s value:

好的,知道了,但是它有什么用呢?如果我没有像这样强制展开,那就不一样了:

if convertedNumber != nil {
    println("convertedNumber has an integer value of \(convertedNumber).")
}
// prints "convertedNumber has an integer value of 123."

谢谢你启发我:)

最佳答案

Wouldn't be the same if I didn't forced the unwrapping

没有。 Optional 是一种不同的类型。如果您实际运行上面的代码而不展开(这在 Playground 上是微不足道的),您可以立即看到差异。

可选打印为 Optional(123),未包装打印为 123。如果不首先展开它,就不能将可选的传递给需要特定类型的东西。

了解 Optional 是完全不同的类型,而不是特定类型的特殊类型(例如,没有“可选 Int”,有一个包含 Int 的 Optional)是理解这一点的关键。我写过它here如果您对更长的解释感兴趣。

关于swift - 强制解包的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25324774/

有关swift - 强制解包的目的的更多相关文章

  1. ruby - 强制浏览器下载文件而不是打开文件 - 2

    我要下载http://foobar.com/song.mp3作为song.mp3,而不是让Chrome在其native中打开它浏览器中的播放器。我怎样才能做到这一点? 最佳答案 您只需要确保发送这些header:Content-Disposition:attachment;filename=song.mp3;Content-Type:application/octet-streamContent-Transfer-Encoding:binarysend_file方法为您完成:get'/:file'do|file|file=File.

  2. ruby - 强制 Ruby 不以标准形式/科学记数法/指数记数法输出 float - 2

    我遇到了同样的问题here对于python,但对于ruby​​。我需要输出这样一个小数字:0.00001,而不是1e-5。有关我的特定问题的更多信息,我正在使用f.write("Mynumber:"+small_number.to_s+"\n")输出到一个文件对于我的问题,准确性不是什么大问题,所以只做一个if语句来检查是否small_number那么更通用的方法是什么? 最佳答案 f.printf"Mynumber:%.5f\n",small_number您可以将.5(小数点右侧5位数字)替换为您喜欢的任何特定格式大小,例如,%8

  3. ruby-on-rails - Rolify的目的是什么? - 2

    嗨,我正在使用rolify,只是意识到我并没有真正利用它的全部潜力。目前,我正在Controller中执行某些操作,如current_user.has_role?:whatever_role重新路由用户,并允许用户担任其他角色……有人问了有关rolify的stackoverflow问题,当我要回答它时,我意识到我做错了。现在,这是我的困惑开始的地方...在capability.rb中,我有:user||=User.new#guestuser(notloggedin)ifuser.has_role?:consumercan:manage,Reviewelsecan:read,Review

  4. ruby-on-rails - 如何在 Rails 脚手架生成器上强制使用单数表名? - 2

    我正在使用遗留数据库并需要创建一些CRUD。我如何使用scaffold生成器并告诉他表的确切名称以避免复数化过程?表格也是西类牙语。 最佳答案 您可以只使用ActiveRecord::Base.table_name=方法手动设置表名。因此,在您的模型中您可以:classOrderDetail 关于ruby-on-rails-如何在Rails脚手架生成器上强制使用单数表名?,我们在StackOverflow上找到一个类似的问题: https://stackove

  5. ruby - 强制使用特定的 gem 版本作为默认版本? - 2

    假设我安装了三个gem:package-0.4.0、package-0.5.0和package-0.5.0-jbfink(我构建了-jbfink一个,因为我对0.5做了非常小的改动.0的来源,并希望将其与官方版本区分开来)。是否有gem(或其他命令)将其设为默认值?现在我已经安装了所有三个,但我的shell正在从package-0.5.0中获取可执行文件,我宁愿它默认为0.5.0-jbfink。将0.5.0-jbfink命名为0.5.1解决了这个问题,但我不想这样做,因为我不想与正式发布的0.5.1出现冲突。 最佳答案 转到conf

  6. ruby - Rake 的目的是什么? - 2

    我知道Rake代表RubyMake,我知道Make是一个unix构建实用程序。现在,我在Xcode工作,将iPhone应用程序构建到Ruby,所以我以前从未使用过Make,我唯一一次使用rake是在rails中或安装一些第三方包时,我输入了像rakedb这样的命令:迁移。我不明白的是……构建实用程序到底是什么?rake的目的是什么?它让我做什么?因此,如果有人能帮我回答这些问题中的任何一个,我将不胜感激。 最佳答案 Rake允许您在每个项目的基础上编写某些任务的脚本,就像Makefile允许Unix开发人员编写他们的编译和构建过程的

  7. ruby - 无法将 BigDecimal 强制转换为 BigDecimal - 2

    这应该很简单,但它正在爆炸。有什么想法吗?d=BigDecimal.new("2.0")YAML::load({:a=>d}.to_yaml)TypeError:BigDecimalcan'tbecoercedintoBigDecimalfrom/Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/inspector.rb:86:in`inspect'from/Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/inspector.rb

  8. ruby - 如何强制 Rack :session + sinatra to read "rack.session" from params instead of cookies - 2

    我正在处理oauth1.0(twitter和flickr)。网站工作在80端口,oauth服务器工作在8080端口算法:向oauth服务器发送ajax请求以检查用户是否有有效的access_token如果用户没有access_token或access_token已过期,则打开授权窗口在oauth服务器的用户session中保存access_token发送分享数据到oauth服务器它使用sinatra+rack:session+rack::session::sequel+sqlite来存储session。它在每个响应中发送Set-Cookie:rack.session=id我正在使用2种

  9. ruby - 如何强制 Ruby 释放内存给操作系统 - 2

    正如标题,我有一个处理大量数据的ruby​​程序。该程序占用了所有内存,其中调用了系统命令hostname,并且发生错误无法分配内存-主机名我试过GC.start但它不起作用。那么如何强制ruby释放未使用的内存呢?OK,这是别人的测试代码,最后报错是big_var被回收了。但是内存仍然没有释放。require"weakref"defreportputs"#{param}:\t\tMemory"+`psax-opid,rss|grep-E"^[[:space:]]*#{$$}"`.strip.split.map(&:to_i)[1].to_s+'KB'endbig_var=""#big

  10. ruby - 带有位串的意外解包结果 - 2

    为什么当我打开irb并运行时放'A'.unpack("B8")我得到01000001但是当我运行放'A'.unpack("B4B4")我只得到0100而不是[0100,0001]?unpack的分辨率是不是只有一个完整的字节?一点都不差? 最佳答案 让我们做一些测试来理解行为:>'A'.unpack('B8')=>["01000001"]它返回char'A'的8个最高有效位(MSB)>'A'.unpack('B4')=>["0100"]它返回char'A'的4MSBs>'A'.unpack('B16')=>["01000001"]它

随机推荐