什么是Objective-C中的isEqualToString的Swift等价物?

Gok*_*lek 259 string swift

我正在尝试运行以下代码:

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")
    }
}
Run Code Online (Sandbox Code Playgroud)

我之前的代码是在Objective-C中,它运行良好:

 if([[self.username text] isEqualToString: @""] ||
    [[self.password text] isEqualToString: @""] ) {
Run Code Online (Sandbox Code Playgroud)

我假设我不能isEqualToString在Swift中使用.任何帮助,将不胜感激.

JJS*_*olo 407

使用Swift,您不再需要检查相等性 isEqualToString

你现在可以使用了 ==

例:

let x = "hello"
let y = "hello"
let isEqual = (x == y)
Run Code Online (Sandbox Code Playgroud)

现在isEqual是true.

要检查对象之间的相等标识(感谢Bryan的修复),请使用new运算符isEqualToString.在这种情况下,==true因为x和y是不相同的变量.

  • `===`是身份运算符,而`==`是相等运算符(默认情况下,在NSObject及其子类上调用`isEqual:`) (37认同)
  • 是的,对不起,"平等",不是身份.错字 :) (3认同)
  • @ user1040049你不能使用===运算符比较String,因为swift中的String是struct而不是class.如果您将文本/字符串类型转换为NSString,则可以使用===运算符进行比较. (3认同)
  • @JJSaccolo您真的会误导身份部分。这个关于`String`比较的问题。Xcode 6.4返回错误“二进制运算符'==='不能应用于两个String操作数” (3认同)

iPa*_*tel 46

使用==运算符代替isEqual

比较字符串

Swift提供了三种比较String值的方法:字符串相等,前缀相等和后缀相等.

字符串平等

如果两个String值在相同的顺序中包含完全相同的字符,则它们被视为相等:

let quotation = "We're a lot alike, you and I."
let sameQuotation = "We're a lot alike, you and I."
if quotation == sameQuotation {
    println("These two strings are considered equal")
}
// prints "These two strings are considered equal"
.
.
.
Run Code Online (Sandbox Code Playgroud)

有关Swift的更多阅读官方文档(搜索比较字符串).


Max*_*tin 13

我除了@JJSaccolo回答之外,您可以创建自定义equals方法作为新的String扩展名,如:

extension String {
     func isEqualToString(find: String) -> Bool {
        return String(format: self) == find
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

let a = "abc"
let b = "abc"

if a.isEqualToString(b) {
     println("Equals")
}
Run Code Online (Sandbox Code Playgroud)

确保原始运算符==可能更好(在Javascript中工作),但对我来说,isEqual方法提供了一些代码清晰度,我们比较字符串

希望它对某人有帮助,


Nic*_*ood 8

在Swift中,==运算符等同于Objective C的isEqual:方法(它调用isEqual方法而不仅仅是比较指针,并且有一个新的===方法用于测试指针是否相同),所以你可以只写这个:

if username == "" || password == ""
{
    println("Sign in failed. Empty character")
}
Run Code Online (Sandbox Code Playgroud)


Lak*_*era 6

实际上,感觉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)")
Run Code Online (Sandbox Code Playgroud)

在objectC中,您可以通过变量将引用传递给字符串对象,在它上面调用方法,这几乎确定了字符串是纯对象的事实.

当您尝试将String视为对象时,这是捕获,在swift中,您无法通过变量通过引用传递字符串对象.Swift将始终传递一个全新的字符串副本.因此,字符串在swift中通常被称为值类型.实际上,两个字符串文字将不相同(===).它们被视为两个不同的副本.

let curious = ("ca" === "ca")
println("This will be false.. and the answer is..\(curious)")
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我们开始摆脱传统的字符串作为对象的思维方式,并将它们视为更像价值观.因此,被视为字符串对象的标识运算符的.isEqualToString不再有效,因为您永远无法在Swift中获得两个相同的字符串对象.您只能比较其值,或者换句话说检查相等性(==).

 let NotSoCuriousAnyMore = ("ca" == "ca")
 println("This will be true.. and the answer is..\(NotSoCuriousAnyMore)")
Run Code Online (Sandbox Code Playgroud)

当你在swift中查看字符串对象的可变性时,这会变得更有趣.但那是另一个问题,另一天.你可能应该研究的东西,因为它真的很有趣.:)希望能够解决一些困惑.干杯!