检查 Swift 文本字段是不是包含非空白

Posted

技术标签:

【中文标题】检查 Swift 文本字段是不是包含非空白【英文标题】:Check if Swift text field contains non-whitespace检查 Swift 文本字段是否包含非空白 【发布时间】:2015-01-04 17:07:22 【问题描述】:

这是How to check if a text field is empty or not in swift 的扩展,而不是重复

给定的答案,

@IBAction func Button(sender: AnyObject) 
    if textField1.text != ""  
        // textfield 1 
    

对我不起作用,即即使在文本字段中没有输入任何内容,也会触发 if 循环。 (我已经对原来的进行了修改,因为我希望仅当字段包含文本时才触发代码)。

第二个答案

@IBAction func Button(sender: AnyObject) 
    if !textField1.text.isEmpty

    

更接近,但它接受像 " " 这样的字符串不为空。我可以自己构建一些东西,但是是否有一个函数可以检查字符串是否包含空格以外的内容?

【问题讨论】:

这是与 Objective-C 中的解决方案相同的问题:***.com/questions/8238691/…。把它翻译成 Swift 应该很容易。 【参考方案1】:

此答案上次针对 Swift 5.2 和 ios 13.5 SDK 进行了修订。


您可以从字符串中修剪空白字符并检查它是否为空:

if !textField1.text.trimmingCharacters(in: .whitespaces).isEmpty 
    // string contains non-whitespace characters

您也可以使用.whitespacesAndNewlines 来删除换行符。

【讨论】:

我可以建议!str.stringByTrimmingCharactersInSet(whitespaceSet).isEmpty吗?我认为 isEmpty 可能会快一点,因为它是 O(N)。 我想说 isEmpty 是或至少应该是 O(1) :) 如何在这里检查文档,比如说,在括号内(在:.whitespaces)。除了空格还有哪些其他选项?什么时候 trimmingCharacters 只可用?我正在学习如何使用文档,但除非我在 *** 上搜索它们,否则我似乎找不到它们。请指教。谢谢 @GelSisaed CharacterSet 的文档以及所有预定义的值可以在这里找到:developer.apple.com/documentation/foundation/characterset【参考方案2】:

下面是我写的很好用的扩展,特别是对于那些来自 .NET 背景的扩展:

extension String 
    func isEmptyOrWhitespace() -> Bool 

        if(self.isEmpty) 
            return true
        

        return (self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) == "")
    

【讨论】:

【参考方案3】:

斯威夫特 4.2

字符串的扩展为空或空格

extension String 
    func isEmptyOrWhitespace() -> Bool 
        
        // Check empty string
        if self.isEmpty 
            return true
        
        // Trim and check empty string
        return (self.trimmingCharacters(in: .whitespaces) == "")
    

原始发帖人的代码在一个可选的文本字段上检查text。所以他需要一些代码来检查可选字符串。所以让我们也创建一个函数来处理它:

可选字符串的扩展为 nil、空或空格

extension Optional where Wrapped == String 
    func isEmptyOrWhitespace() -> Bool 
        // Check nil
        guard let this = self else  return true 
        
        // Check empty string
        if this.isEmpty 
            return true
        
        // Trim and check empty string
        return (this.trimmingCharacters(in: .whitespaces) == "")
    

【讨论】:

【参考方案4】:

akashivskyy answer 在 Swift 3.0 中:

let whitespaceSet = CharacterSet.whitespaces
if !str.trimmingCharacters(in: whitespaceSet).isEmpty 
  // string contains non-whitespace characters

【讨论】:

【参考方案5】:
extension StringProtocol where Index == String.Index 
    var isEmptyField: Bool 
        return trimmingCharacters(in: .whitespaces) == ""
    



if yourTextField.text.isEmptyField 
    // Field is empty
 else 
    // Field is NOT empty

【讨论】:

【参考方案6】:

在 swift 4 中回答:

extension String 
    func isEmptyOrWhitespace() -> Bool 
        if(self.isEmpty) 
            return true
        
        return (self.trimmingCharacters(in: NSCharacterSet.whitespaces) == "")
    

【讨论】:

【参考方案7】:

在 Swift 3.0 中回答

if stringValue.trimmingCharacters(in: CharacterSet.whitespaces).isEmpty

【讨论】:

【参考方案8】:

Swift 3.* 中的答案,考虑换行符、制表符

extension String 

    var containsNonWhitespace: Bool 
        return !self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
    


【讨论】:

这个问题已经有了一个被接受的答案,以及另一个在 Swift 3 中投票赞成的答案。【参考方案9】:

如果您需要演示,请用图片回答

// MY FUNCTIONS
private func checkMandatoryFields()

    //CHECK EMPTY OR SPACES ONLY FIELDS
    if let type = typeOutle.text, let name = nameOutlet.text, let address = addressOutlet.text, type.trimmingCharacters(in: .whitespaces).isEmpty || name.trimmingCharacters(in: .whitespaces).isEmpty || address.trimmingCharacters(in: .whitespaces).isEmpty 
        print("Mandatory fields are: ")
        errorDisplay(error: "Mandatory fields are: Type, Name, Address.")
        return
    


【讨论】:

【参考方案10】:

斯威夫特 4.2

@IBAction func checkSendButton(_ sender: UITextField) 
    if((sender.text?.count)! > 0 && !(sender.text!.trimmingCharacters(in: .whitespaces)).isEmpty)
        self.sendButton.isEnabled = true
    
    else
        self.sendButton.isEnabled = false
    

【讨论】:

【参考方案11】:

方法

 func trim() -> String 
    return self.trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines)

使用

if textField.text.trim().count == 0 
    // Do your stuff

【讨论】:

以上是关于检查 Swift 文本字段是不是包含非空白的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 2.0 中检查 UITextField 是不是为空白?有没有更好的方法来计算字符串? [复制]

检查字段是不是包含任何数字?

表格视图单元格中的文本字段

检查 HtmlString 是不是是 C# 中的空格

如何检测文本字段中是不是包含文本而不是数值?

用于完成按钮的文本字段的 swift ui 扩展