1

应该做这样的如何在Swift中正确执行Nil合并?

var inputField = UITextField() 
let defaultText = "PLACEHOLDER" 
let newText = inputField.text!.isEmpty ? defaultText : inputField.text! 
let newText2 = inputField.text ?? defaultText 

newText作品,并输出PLACEHOLDER

newText只显示在预览栏""斯威夫特

为什么?如何使它正确?

+0

“text”属性的值是否为“nil”?我认为这将是不一样的空串。 –

回答

0

""nil之间有很大的差异。您的text财产是,但它是不是nil。 (它实际上等于字符串""。)因此,您的.isEmpty检查工作,但您尝试nil coalesce没有。另一方面,这将起作用:

let text: String? = nil 
let newText2 = text ?? defaultText 

所以你对零合并的理解是好的;假设一个空的文本字段返回nil不是:它实际上返回一个空的 - 但是存在的字符串。

1
import UIKit 

var inputField = UITextField() 
inputField.text?.isEmpty // true !!! 
// by deafault it is empty, so i set it 
inputField.text = "default text" 

let defaultText = "PLACEHOLDER" 
let newText = inputField.text?.isEmpty == true ? defaultText : inputField.text! 
let newText2 = inputField.text ?? defaultText 

print(newText) // default text 
print(newText2) // default text 
程式码中newText2

为空字符串,因为inputField.text不是零

的安全方法如何做到这一点(inputField.text可能是零,空或一些文本)

import UIKit 

var inputField = UITextField() 
let defaultText = "PLACEHOLDER" 
if let txt = inputField.text { 
    inputField.text = txt.isEmpty ? defaultText : txt 
} 

let newText = inputField.text ?? defaultText 

print(inputField.text, newText) // Optional("PLACEHOLDER") PLACEHOLDER 

因此,如果inputField.text为空或零,则设置为某个默认值,否则文本不会更改

+1

@LeoDabus :-)我现在看,你在说什么,谢谢!我用拷贝 - 从OP问题代码粘贴...编辑! – user3441734

+0

我明白了,谢谢。 – S1U