ios - 我不必解包 Swift 可选的情况?

标签 ios swift

我很困惑为什么 label.text = textField.text 行可以工作,即使 textField.text 是可选的。通常我会把它写成:

if let text2 = textField.text {
    label.text = text2
} 

上面的代码工作正常,但为什么 label.text = textField.text 也工作正常?我认为解包选项是必须的?什么时候必须使用 if let 语法,什么时候不需要?

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        label.text = ""
    }

    @IBAction func setTextButtonTapped(_ sender: Any) {
        label.text = textField.text
    }

    @IBAction func clearTextButtonTapped(_ sender: Any) {
        textField.text = ""
        label.text = ""
    }
}

最佳答案

UILabel text 是可选的 String

UITextField 文本 是可选的 String

可选的可以接受可选的或非可选的。

一个非可选的只能接受一个非可选的。

只有在需要非可选时才需要解包可选。

关于ios - 我不必解包 Swift 可选的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45112931/

相关文章:

ios - UIBarButtonItem 在 < iOS 11 上的位置不正确

ios - iOS中的UI抽屉?

ios - swift : how to open an URL in-app

ios - 一旦使用 SDWebImage 下载完成,如何决定是否将图像分配给 UIImageView?

swift - 在 UIKit 中嵌入 SwiftUI 时无法隐藏导航栏

swift - tableView 中屏幕外的单元格在访问时返回 nil, swift

swift - SpriteKit : Scaling Does Not Work Correctly

ios - Payumoney IOS sdk测试显示支付失败 "key is not valid"

ios - SKVideoNode 中的视频在 Xcode 模拟器中工作正常,但无法在大多数设备上播放

objective-c - 从 Swift 访问用 Objective C 编写的枚举