字符串比较不适用于 Swift
String Comparison Not Working With Swift
我似乎无法弄清楚这里发生了什么。我正在尝试根据两个字符串是否匹配来执行操作。有时它似乎有效,有时却无效。我的应用程序(用 Swift 编写)允许用户搜索高尔夫球场列表和 select 一个。如果他们 select 一个,那么它将作为以前的课程添加到 Realm。如果他们过去已经 select 访问过这个高尔夫球场,那么我会显示一条消息,说明他们过去已经 select 访问过该高尔夫球场,因此不会将其添加到列表中两次。我试图删除空格以提供帮助,但它似乎仍然不起作用。由于我从中下载的数据库,某些高尔夫球场具有“??、-、$”等字符。不确定这是否重要。同样,有时有效,有时无效。只是不知道为什么。谢谢
我在代码中比较的两个字符串是:
if previousCourse.name.stringByReplacingOccurrencesOfString(" ", withString: "") == courseFromRealm.name.stringByReplacingOccurrencesOfString(" ", withString: "")
完整方法:
tableView.deselectRowAtIndexPath(indexPath, animated: true)
if searchController.active {
let realm = try! Realm()
try! realm.write {
let addPreviousCourse = PreviousCourse()
addPreviousCourse.name = searchResults![indexPath.row].name
addPreviousCourse.city = searchResults![indexPath.row].city
addPreviousCourse.state = searchResults![indexPath.row].state
self.previousCourse = addPreviousCourse
for course in previousCoursesFromRealm {
courseFromRealm = course
}
if previousCourse.name.stringByReplacingOccurrencesOfString(" ", withString: "") == courseFromRealm.name.stringByReplacingOccurrencesOfString(" ", withString: "") {
displayAlert("Whoops!", message: "Check your list of previously selected courses or choose a different course.", actionTitle: "OK")
} else {
realm.add(previousCourse)
print(previousCourse.name)
searchController.active = false
}
if searchController.active == false {
coursesTableView.reloadData()
}
}
}
}
我认为你应该使用 isEqualToString 函数来比较两个字符串。
好的,我知道发生了什么。我感谢大家的帮助,这些建议让我走上了尝试其他选择的道路。发生的事情是 "courseFromRealm" 仅在使用 for-in 循环时采用我之前的 CoursesFromRealm 中的最后一个值。这就是为什么它有时有效有时无效的原因,因为如果我选择的课程是 for-in 循环中的最后一个值,那么我的代码似乎有效,否则就无效。所以我摆脱了 for-in 循环并使用 previousCoursesFromRealm 上的 "contains" 方法来简单地检查我选择的这门课程是否已经在我以前的课程列表中。如果是,则显示警告消息,如果不是,则将其添加到列表中。再次感谢大家的帮助!对编程和工作仍然有点陌生。
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
if searchController.active {
let realm = try! Realm()
try! realm.write {
let addPreviousCourse = PreviousCourse()
addPreviousCourse.name = searchResults![indexPath.row].name
addPreviousCourse.city = searchResults![indexPath.row].city
addPreviousCourse.state = searchResults![indexPath.row].state
self.previousCourse = addPreviousCourse
if previousCoursesFromRealm.contains( { [=10=].name == previousCourse.name }) {
displayAlert("Whoops!", message: "This course already exists inside of your previous course list. Please choose a different course.", actionTitle: "OK")
} else {
realm.add(previousCourse)
searchController.active = false
}
}
if searchController.active == false {
coursesTableView.reloadData()
}
}
}
我似乎无法弄清楚这里发生了什么。我正在尝试根据两个字符串是否匹配来执行操作。有时它似乎有效,有时却无效。我的应用程序(用 Swift 编写)允许用户搜索高尔夫球场列表和 select 一个。如果他们 select 一个,那么它将作为以前的课程添加到 Realm。如果他们过去已经 select 访问过这个高尔夫球场,那么我会显示一条消息,说明他们过去已经 select 访问过该高尔夫球场,因此不会将其添加到列表中两次。我试图删除空格以提供帮助,但它似乎仍然不起作用。由于我从中下载的数据库,某些高尔夫球场具有“??、-、$”等字符。不确定这是否重要。同样,有时有效,有时无效。只是不知道为什么。谢谢
我在代码中比较的两个字符串是:
if previousCourse.name.stringByReplacingOccurrencesOfString(" ", withString: "") == courseFromRealm.name.stringByReplacingOccurrencesOfString(" ", withString: "")
完整方法:
tableView.deselectRowAtIndexPath(indexPath, animated: true)
if searchController.active {
let realm = try! Realm()
try! realm.write {
let addPreviousCourse = PreviousCourse()
addPreviousCourse.name = searchResults![indexPath.row].name
addPreviousCourse.city = searchResults![indexPath.row].city
addPreviousCourse.state = searchResults![indexPath.row].state
self.previousCourse = addPreviousCourse
for course in previousCoursesFromRealm {
courseFromRealm = course
}
if previousCourse.name.stringByReplacingOccurrencesOfString(" ", withString: "") == courseFromRealm.name.stringByReplacingOccurrencesOfString(" ", withString: "") {
displayAlert("Whoops!", message: "Check your list of previously selected courses or choose a different course.", actionTitle: "OK")
} else {
realm.add(previousCourse)
print(previousCourse.name)
searchController.active = false
}
if searchController.active == false {
coursesTableView.reloadData()
}
}
}
}
我认为你应该使用 isEqualToString 函数来比较两个字符串。
好的,我知道发生了什么。我感谢大家的帮助,这些建议让我走上了尝试其他选择的道路。发生的事情是 "courseFromRealm" 仅在使用 for-in 循环时采用我之前的 CoursesFromRealm 中的最后一个值。这就是为什么它有时有效有时无效的原因,因为如果我选择的课程是 for-in 循环中的最后一个值,那么我的代码似乎有效,否则就无效。所以我摆脱了 for-in 循环并使用 previousCoursesFromRealm 上的 "contains" 方法来简单地检查我选择的这门课程是否已经在我以前的课程列表中。如果是,则显示警告消息,如果不是,则将其添加到列表中。再次感谢大家的帮助!对编程和工作仍然有点陌生。
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
if searchController.active {
let realm = try! Realm()
try! realm.write {
let addPreviousCourse = PreviousCourse()
addPreviousCourse.name = searchResults![indexPath.row].name
addPreviousCourse.city = searchResults![indexPath.row].city
addPreviousCourse.state = searchResults![indexPath.row].state
self.previousCourse = addPreviousCourse
if previousCoursesFromRealm.contains( { [=10=].name == previousCourse.name }) {
displayAlert("Whoops!", message: "This course already exists inside of your previous course list. Please choose a different course.", actionTitle: "OK")
} else {
realm.add(previousCourse)
searchController.active = false
}
}
if searchController.active == false {
coursesTableView.reloadData()
}
}
}