Будет ли использование Swift's Guard или если Let Keywords позаботится о том, чтобы не использовать эту функцию checkNil? - PullRequest
0 голосов
/ 02 июня 2018

Я понимаю, что программирование на языке, таком как Swift, намерение может быть выражено различными способами.Я следую учебному пособию и увидел приведенный ниже код, который не является тем, к чему я привык, потому что автор создал функцию для проверки на ноль.Можно ли избежать функции checkNil, просто используя guard или if let, или как-то улучшить код?Это отличный учебник, и я просто пытаюсь улучшить свои знания по интерпретации кода другого разработчика, чтобы найти способы быть более лаконичными.

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.
    }

}

Ответы [ 3 ]

0 голосов
/ 02 июня 2018

Функции, известные для использования для повторного использования, он конструирует его один раз и использует его код дважды внутри findRouteButtonClicked, конечно, вы можете использовать операторы guard или let, но что, если есть много строк для проверки их обнуляемости в разных частяхVC

0 голосов
/ 02 июня 2018

Есть много способов быстро избавиться от всей ерунды checkNil(_:).


idea # 1

Я бы просто сделал розетки необязательными слабыми свойствами, а затем использовал бынеобязательное сцепление, например:

@IBOutlet private weak var from: UITextField?
@IBOutlet private weak var to: UITextField?

, тогда вы можете использовать это:

@IBAction func findRouteButtonClicked() {

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

idea # 2

или если вы хотите сделать его более элегантнымвы можете создать расширение на UITextField, например:

extension UITextField {

    var alwaysText: String {
        return self.text ?? ""
    }
}

, чтобы вы могли заменить строки let на более читаемые, например

@IBAction func findRouteButtonClicked() {

    let fromText = from.alwaysText
    let toText = to.alwaysText
}
0 голосов
/ 02 июня 2018

Вы можете использовать необязательное связывание (в разделе optionals), чтобы проверить, имеет ли значение ноль в этом коде:

let fromText = self.checkNil(from.text as AnyObject?)

можно изменить на

if let fromText = from.text {
    // Run bit of code
}

или поскольку вы не используете это значение сразу, вы можете сделать:

let fromText = from.text ?? ""

с помощью оператора объединения , что эквивалентно использованию этой проверки длянулевая функция.

...