检查 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 文本字段是不是包含非空白的主要内容,如果未能解决你的问题,请参考以下文章