按照本教程,我正在学习Swift for iOS 8/OSX 10.10 ,并且多次使用术语" unwrapped value ",如本段(在Objects和Class下):
使用可选值时,您可以写吗?在诸如方法,属性和下标之类的操作之前.如果之前的值?是零,一切都在?被忽略,整个表达式的值为零.否则,可选值是解包,并且后面的一切都是?作用于未包装的价值.在这两种情况下,整个表达式的值都是可选值.
let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")
let sideLength = optionalSquare?.sideLength
Run Code Online (Sandbox Code Playgroud)
我没有得到它,并在没有运气的情况下在网上搜索.
这意味着什么?
根据Cezary的回答,原始代码的输出与最终解决方案(在操场上测试)之间存在细微差别:


在第二种情况下,超类的属性显示在输出中,而在第一种情况下有一个空对象.
在这两种情况下,结果不应该是相同的吗?
相关问答:Swift中的可选值是什么?
在Swift编程中,我发现了一些带有对象的问号.
var window: UIWindow?
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释它的使用吗?
通常,您需要编写如下代码:
if someOptional != nil {
// do something with the unwrapped someOptional e.g.
someFunction(someOptional!)
}
Run Code Online (Sandbox Code Playgroud)
这似乎有点冗长,而且我听说使用!强制解包操作符可能是不安全的,最好避免使用.有没有更好的方法来处理这个?
这两个陈述让我感到困惑
var optionalString: String? = "Hello"
Run Code Online (Sandbox Code Playgroud)
相反,我们可以写它
var optionalString: String = "Hello"
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别?
我们也可以在没有可选值的情况下执
var str: String = nil
str = "Hello"
Run Code Online (Sandbox Code Playgroud)
请澄清.
打印对象的描述会使lldb在对象的描述前面使用关键字"Some"(这里我是一个可选的字符串):
(lldb) po someString
Optional<String>
- Some: "Hello Jupiter"
Run Code Online (Sandbox Code Playgroud)
这个关键字是什么意思; 为什么会这样?
我是Swift的新手,我有一点问题.
我有一段代码,任何行都可能抛出错误.
我的问题是,我不希望逐行捕获每个错误,我想在一个语句中捕获它们.
在python中你可以做到这一点
try:
exampleArray = [1,2,3,4]
print(exampleArray[4])
except Exception as e:
print(e)
pass
Run Code Online (Sandbox Code Playgroud)
这样做是尝试从不存在的数组中打印一个值,但它被except语句捕获,我想知道Swift中是否存在这么简单的东西
为了澄清,我不是想捕捉index out of range错误,我只是想捕捉错误,无论它是什么.
是否可以在不声明我自己的错误的情况下逐行抛出它们?
在阅读The Swift Programming Language时,我遇到了这个片段:
您可以使用if和let一起使用可能缺少的值.这些值表示为选项.可选值包含值或包含nil以指示缺少值.在值的类型后面写一个问号(?)以将值标记为可选.
// Snippet #1
var optionalString: String? = "Hello"
optionalString == nil
// Snippet #2
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
Run Code Online (Sandbox Code Playgroud)
Snippet#1足够清晰,但是在Snippet#2中发生了什么?有人可以分解并解释吗?它只是使用if - else块的替代方案吗?let在这种情况下,确切的作用是什么?
我确实看过这个页面,但还是有点困惑.
我一直在使用可选项.我已将字符串变量声明为可选项
var str: String?
Run Code Online (Sandbox Code Playgroud)
现在我在这个变量中设置了一些值str = "hello".现在,如果我打印这个可选项而不打开它,那么它打印为
可选("你好")
但是,如果我在标签上设置文本,self.label.text = str那么它只显示值
你好
请解释为什么它不会在标签上显示文字
可选("你好")
我写了一个代码将字符串转换为double但是给出了错误:
无法将表达式的类型'Double'转换为'NSString'类型
我的代码是:
var first = previewLable.text
var second = label1.text
var number1: Double = (first as NSString).doubleValue
var number2: Double = (second as NSString).doubleValue
Run Code Online (Sandbox Code Playgroud)
我要做些什么来修复这个错误???
谢谢
我在SwiftUI应用程序中向我的身体添加了一个图像,并希望该图像能够覆盖设备的整个宽度,但不能覆盖整个图像。
在中body,我返回图像对象:
var body: some View {
Image("page-under-construction")
}
Run Code Online (Sandbox Code Playgroud)
并且图像显示出来,但是,它太大了:

我尝试设置框架:这会影响突出显示的边界,但图像不会调整大小。
结合起来,我玩了.aspectRatio(contentMode:),似乎对布局没有任何影响。
如何使图像有效地达到屏幕宽度的100%?
题:
当我可以检查值是否为零时,为什么Swift会使用类似选项的东西?从本质上讲,我想知道这种语言功能的用途是什么,我正在学习Swift atm,从初学者的角度来看,它似乎多余/无用.
PS:我来自Javascript.
码:
做一些像我这样的事情似乎很荒谬:
if let normalImage = imageFromFaceBook {
print(normalImage) // normalImage is a constant
} else {
print("There is no image")
}
Run Code Online (Sandbox Code Playgroud)
当我可以做的时候:
if (imageFromFacebook != nil) {
print(imageFromFacebook) // normalImage is a constant
} else {
print("There is no image")
}
Run Code Online (Sandbox Code Playgroud)
像我通常在Javascript中做的那样:
if (imageFromFacebook != null) {
print(imageFromFacebook) // normalImage is a constant
} else {
print("There is no image")
}
Run Code Online (Sandbox Code Playgroud)