swift – 强制解包变量不好?

前端之家收集整理的这篇文章主要介绍了swift – 强制解包变量不好?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的导师向我们介绍了(!)操作符,然后告诉我们不要再使用它了。告诉我们为什么当然,如果可选项为零,它会崩溃我们的应用程序。

然而,我发现自己处于像这样的情况,爆炸操作符似乎是最简洁和安全的选择。

  1. func fullName() -> String {
  2. if middleName == nil {
  3. return "\(firstName) \(lastName)"
  4. }else{
  5. return "\(firstName) \(middleName!) \(lastName)"
  6. }
  7. }

有没有更好的方法来做这样的事情?

另外,如果有人在想,这是全课。

  1. class CPerson{
  2. var firstName: String
  3. var middleName: String?
  4. var lastName: String
  5.  
  6. init(firstName: String,middleName: String?,lastName: String) {
  7. self.firstName = firstName
  8. self.middleName = middleName
  9. self.lastName = lastName
  10. }
  11. convenience init(firstName: String,lastName: String) {
  12. self.init(firstName: firstName,middleName: nil,lastName: lastName)
  13. }
  14. func fullName() -> String {
  15. if middleName == nil {
  16. return "\(firstName) \(lastName)"
  17. }else{
  18. return "\(firstName) \(middleName!) \(lastName)"
  19. }
  20. }
  21. }

我的导师说:“如果我看到你使用轰炸机运算符,我们要打”O_O“

使用if或guard构造:
  1. func fullName() -> String {
  2. if let middleName = middleName {
  3. return "\(firstName) \(middleName) \(lastName)"
  4.  
  5. } else {
  6. return "\(firstName) \(lastName)"
  7. }
  8. }
  9.  
  10. func fullName() -> String {
  11. guard let middleName = middleName else {
  12. return "\(firstName) \(lastName)"
  13. }
  14. return "\(firstName) \(middleName) \(lastName)"
  15. }

我已经把警卫声明放在了完整性之中,但是正如其他人所言,这更常见于错误/失败案例。

我也建议不要使用字符串插入字符串。它们已经是字符串,不需要在新的字符串中使用每个名称的描述。

考虑返回firstName“”lastName。当字符串插值可能返回意外结果的情况,请参见Difference between String interpolation and String initializer in Swift

猜你在找的Swift相关文章