我正在尝试运行下面的代码:
import UIKit
class LoginViewController: UIViewController {
@IBOutlet var username : UITextField = UITextField()
@IBOutlet var password : UITextField = UITextField()
@IBAction func loginButton(sender : AnyObject) {
if username .isEqual("") || password.isEqual(""))
{
println("Sign in failed. Empty character")
}
}
我之前的代码是在Objective-C中编写的,运行得很好:
if([[self.username text] isEqualToString: @""] ||
[[self.password text] isEqualToString: @""] ) {
我假设我不能在Swift中使用isEqualToString。任何帮助都将不胜感激。
实际上,swift似乎在试图让字符串更像值,而不是对象。然而,这并不意味着在底层swift不把字符串作为对象,我相信你们都注意到了,你仍然可以调用字符串的方法并使用它们的属性。
例如:-
//example of calling method (String to Int conversion)
let intValue = ("12".toInt())
println("This is a intValue now \(intValue)")
//example of using properties (fetching uppercase value of string)
let caUpperValue = "ca".uppercaseString
println("This is the uppercase of ca \(caUpperValue)")
在objectC中,你可以在调用方法的基础上,通过变量传递对字符串对象的引用,这基本上确立了字符串是纯对象的事实。
当你试图将字符串视为对象时,在swift中,你不能通过引用通过变量传递字符串对象。Swift总是会传递一个全新的字符串副本。因此,字符串在swift中通常被称为值类型。事实上,两个字符串字面量不会完全相同(===)。它们被视为两个不同的副本。
let curious = ("ca" === "ca")
println("This will be false.. and the answer is..\(curious)")
正如你所看到的,我们开始摆脱将字符串视为对象的传统方式,而将它们视为值。因此,. isequaltostring作为字符串对象的标识操作符不再有效,因为你永远无法在Swift中获得两个相同的字符串对象。您只能比较它的值,换句话说,检查是否相等(==)。
let NotSoCuriousAnyMore = ("ca" == "ca")
println("This will be true.. and the answer is..\(NotSoCuriousAnyMore)")
当您查看swift中字符串对象的可变性时,这变得更加有趣。但这是另一个问题,另一天。你应该研究一下,因为这很有趣。:)希望这能澄清一些困惑。干杯!