使用 Swift 的 Guard 或 if Let Keywords 是否可以不必使用此 checkNil 函数?
Would using Swift's Guard or if Let Keywords take care of not having to use this checkNil function?
我了解使用 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.
}
}
您可以使用 optional binding(在 optionals
部分下)检查此代码中的值是否为 nil:
let fromText = self.checkNil(from.text as AnyObject?)
可以改成
if let fromText = from.text {
// Run bit of code
}
或者由于您不立即使用该值,您可以这样做:
let fromText = from.text ?? ""
使用 coalescing operator 等同于使用 check-for-nil 函数。
以使用获得可重用性而闻名的函数,他构造一次并在内部使用它的代码两次 findRouteButtonClicked
当然你可以使用 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
}
我了解使用 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.
}
}
您可以使用 optional binding(在 optionals
部分下)检查此代码中的值是否为 nil:
let fromText = self.checkNil(from.text as AnyObject?)
可以改成
if let fromText = from.text {
// Run bit of code
}
或者由于您不立即使用该值,您可以这样做:
let fromText = from.text ?? ""
使用 coalescing operator 等同于使用 check-for-nil 函数。
以使用获得可重用性而闻名的函数,他构造一次并在内部使用它的代码两次 findRouteButtonClicked
当然你可以使用 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
}