Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将使用Swift';s Guard或如果让关键字处理不必使用此checkNil函数?_Swift_Optional_Guard - Fatal编程技术网

将使用Swift';s Guard或如果让关键字处理不必使用此checkNil函数?

将使用Swift';s Guard或如果让关键字处理不必使用此checkNil函数?,swift,optional,guard,Swift,Optional,Guard,我知道用Swift等语言编程可以用多种方式表达意图。我正在跟随一个教程,看到了下面的代码,这不是我经常看到的,因为作者创建了一个函数来检查nil。通过简单地使用guard或if-let语句或者确实以某种方式改进了代码,可以避免checkNil函数吗?这是一个很棒的教程,我只是想提高我对解释其他开发人员代码的知识,以找到更简洁的方法 import UIKit class ViewController: UIViewController { private let rideService

我知道用Swift等语言编程可以用多种方式表达意图。我正在跟随一个教程,看到了下面的代码,这不是我经常看到的,因为作者创建了一个函数来检查nil。通过简单地使用guard或if-let语句或者确实以某种方式改进了代码,可以避免checkNil函数吗?这是一个很棒的教程,我只是想提高我对解释其他开发人员代码的知识,以找到更简洁的方法

import UIKit

class ViewController: UIViewController {

    private let rideService = DummyRideService()

    private var rides = [Ride]()

    @IBOutlet var from: UITextField!

    @IBOutlet var to: UITextField!

    @IBOutlet var ridesTableView: UITableView!

    @IBAction func findRouteButtonClicked(){
        let fromText = self.checkNil(from.text as AnyObject?)
        let toText = self.checkNil(to.text as AnyObject?)

    }

    func checkNil(_ string: AnyObject?) -> String {
        return string == nil ? "": string as! String
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}
您可以使用(在
选项
部分下)检查此代码中的值是否为零:

let fromText = self.checkNil(from.text as AnyObject?)
可以改为

if let fromText = from.text {
    // Run bit of code
}
或者,由于您没有立即使用该值,您可以执行以下操作:

let fromText = from.text ?? ""
使用等同于使用检查为零功能。

您可以使用(在
选项部分下)检查此代码中的值是否为零:

let fromText = self.checkNil(from.text as AnyObject?)
可以改为

if let fromText = from.text {
    // Run bit of code
}
或者,由于您没有立即使用该值,您可以执行以下操作:

let fromText = from.text ?? ""

使用相当于使用检查为零的功能。

已知的用于获得可重用性的功能,他在
FindLoteButtonClicked
中构造了一次并使用了两次它的代码当然你可以使用guard或let语句但是如果在VC的不同部分有很多字符串来检查它们的可空性呢,他构造了它一次,在里面使用了它的代码两次当然你可以使用guard或let语句,但是如果在VC的不同部分有很多字符串来检查它们的可空性怎么办?有很多方法可以很快摆脱整个
checkNil(:)
的无意义


想法#1 我只是简单地将outlets设置为可选的弱属性,然后使用可选的链接,如:

@IBOutlet private weak var from: UITextField?
@IBOutlet private weak var to: UITextField?
然后你可以用这个:

@IBAction func findRouteButtonClicked() {

    let fromText = from?.text ?? ""
    let toText = to?.text ?? ""
}

想法2 或者,如果您想让它更优雅,可以在
UITextField
上创建一个扩展,如:

extension UITextField {

    var alwaysText: String {
        return self.text ?? ""
    }
}
因此,您可以将
let
行替换为这些可读性更强的行,如

@IBAction func findRouteButtonClicked() {

    let fromText = from.alwaysText
    let toText = to.alwaysText
}

有很多方法可以快速摆脱整个
checkNil(:)
无意义


想法#1 我只是简单地将outlets设置为可选的弱属性,然后使用可选的链接,如:

@IBOutlet private weak var from: UITextField?
@IBOutlet private weak var to: UITextField?
然后你可以用这个:

@IBAction func findRouteButtonClicked() {

    let fromText = from?.text ?? ""
    let toText = to?.text ?? ""
}

想法2 或者,如果您想让它更优雅,可以在
UITextField
上创建一个扩展,如:

extension UITextField {

    var alwaysText: String {
        return self.text ?? ""
    }
}
因此,您可以将
let
行替换为这些可读性更强的行,如

@IBAction func findRouteButtonClicked() {

    let fromText = from.alwaysText
    let toText = to.alwaysText
}

您缺少一个带有to变量的var。您不需要将它们从IUO更改为应用可选链接。由于没有检查未连接的插座,因此您比原来的CheckNil做得更多。感谢反馈,添加了缺少的关键字—
CheckNil
方法从根本上显示了一种错误的方法,并且一次完成了非常糟糕的编码。。。任何提议完全删除该方法的想法都是一种更好的方法。我同意。当我看到你把答案描述为胡说八道的时候,我就把你的答案提高了。你缺少了一个带有to变量的var。您不需要将它们从IUO更改为应用可选链接。由于没有检查未连接的插座,因此您比原来的CheckNil做得更多。感谢反馈,添加了缺少的关键字—
CheckNil
方法从根本上显示了一种错误的方法,并且一次完成了非常糟糕的编码。。。任何提议完全删除该方法的想法都是一种更好的方法。我同意。当我看到你把你的回答说成是胡说八道时,我就对它投了赞成票。