如果在Swift中满足条件,则保存TextField输入的最佳方法

我有2个带字符串的URL文本字段。如果文本字段为空,则保存一个自定义字符串(“ no link A”),如果已填充,则该字符串必须有效,否则显示警报。

有没有比使用许多“ if语句”更干净的方法?

linkA = linkATextField.text      
linkB = linkBTextField.text

     @IBaction func doneButton(_ sender: Any) {

            if linkA.isEmpty && linkB.isEmpty {
                linkA = "no link A"
                linkB = "no link B"
                saveData()
            } else {
                if linkA.isEmpty == false && linkB.isEmpty == false  {
                    if linkA.isValidURL && linkB.isValidURL {
                         saveData()
                    } else {
                        showErrorAlert()
                    }
                }
                if linkA.isEmpty && linkB.isEmpty == false {
                    linkA = "no link A"
                    if linkB.isValidURL {
                         saveData()
                    } else {
                        showErrorAlert()
                    }
                }
                if linkA.isEmpty == false && linkB.isEmpty {
                    linkB = "no link B"
                    if linkA.isValidURL {
                         saveData()
                    } else {
                        showErrorAlert()
                    }
                }
            }

        }
litongfei1208 回答:如果在Swift中满足条件,则保存TextField输入的最佳方法

或者您可以使用Switch case,试试这个

 @IBAction func doneButton(_ sender: Any){
        switch (linkA.isEmpty,linkB.isEmpty) {
        case (true,true):
            // no link A,B
             saveData()
            break
          case (false,false):
             // no link A,B
             if linkA.isValidURL,linkB.isValidURL {
                 saveData()
              }else { showErrorAlert() }
            break
             case (true,false):
              // no link A
            linkB.isValidURL  ? saveData() : showErrorAlert()
            break
            case (false,true):
             // no link B
            linkA.isValidURL  ? saveData() : showErrorAlert()
            break
        default:
           showErrorAlert()
             break
        }
    }
,

您可以使用switch语句使您的逻辑更易于理解

switch (linkA.isEmpty,linkB.isEmpty) {
case (true,true):
    // do something for both empty
    print("both are empty")
case (true,false):
    // do something for linkA being empty
    print("linkA is empty")
case (false,true):
    // do something for linkB being empty
    print("linkB is empty")
case (false,false):
    // do something for both NOT empty
    print("both are not empty")
}

然后您可以创建一个显示警报的帮助程序功能,而不是多次重复相同的代码。

,

您可以尝试另一种替代方法

# config/initializers/webmock.rb
if Rails.env.test?
  require 'webmock'
  WebMock.disable_net_connect!(allow_localhost: true)
end

,

您可以使用Rx来管理它,这是一个示例

    @IBOutlet weak var textField1: UITextField!
    @IBOutlet weak var textField2: UITextField!
    @IBOutlet weak var actionButton: UIButton!
    private var disposedBag = DisposeBag()

private func startSettings() {
    let obs1 = textField1.rx.text.orEmpty
    let obs2 = textField2.rx.text.orEmpty
    Observable
        .combineLatest(obs1,obs2)
        .map { s1,s2 in
            return s1.count > 0 && s2.count > 0
    }
    .debounce(.seconds(1),scheduler: MainScheduler.instance)
    .bind(to: actionButton.rx.isEnabled)
    .disposed(by: disposedBag)
}

如果文本字段为空,则将禁用“操作”按钮,等待1秒钟以等待文本字段的任何更改。在.map {}中,您可以根据需要显示警报

本文链接:https://www.f2er.com/3029925.html

大家都在问