Ios 我需要知道我的变量是否包含特定的单词
我需要知道变量“act”是否包含特定字符串,并打印true或false 我多次尝试使用“contains”函数,但它好像不是内置的 当我把“contains”放在func“parseJson”中时,它就好像不存在一样,如果我把它放在func“parseJson”中,我会发现“act”不存在 这里是初学者 我尝试的是:Ios 我需要知道我的变量是否包含特定的单词,ios,swift,Ios,Swift,我需要知道变量“act”是否包含特定字符串,并打印true或false 我多次尝试使用“contains”函数,但它好像不是内置的 当我把“contains”放在func“parseJson”中时,它就好像不存在一样,如果我把它放在func“parseJson”中,我会发现“act”不存在 这里是初学者 我尝试的是: if act.contains("string") { print("exists") } 及 我遇到这
if act.contains("string") {
print("exists")
}
及
我遇到这样的错误:“Activity”类型的值没有成员“contains”
我的代码:
import UIKit
import Foundation
protocol HomeModelDelegate
{
func itemsDownloaded(activities: [Activity])
}
class HomeModel: NSObject
{
var delegate:HomeModelDelegate?
func getItems()
{
let serviceUrl = "https://www.zzzway.com/dbusers.php"
let url = URL (string: serviceUrl)
if let url = url
{
let session = URLSession(configuration: .default)
let task = session.dataTask(with: url, completionHandler: { (data, response, error) in
if error == nil
{
self.parseJson(data!)
}
else
{
}
})
task.resume()
}
}
func parseJson(_ data:Data)
{
var actArray = [Activity]()
do {
let jsonArray = try JSONSerialization.jsonObject(with: data, options: []) as! [Any]
for jsonResult in jsonArray
{
let jsonDict = jsonResult as! [String:String]
let act = Activity (NumUser: jsonDict["NumUser"]!, cFirstname: jsonDict["cFirstname"]!, cLastname: jsonDict["cLastname"]!, cEmail: jsonDict["cEmail"]!, cPassword: jsonDict["cPassword"]!, NumPts: jsonDict["NumPts"]!, forgotpass: jsonDict["forgotpass"]!)
print (act)
actArray.append(act)
}
delegate?.itemsDownloaded(activities: actArray)
}
catch
{
print("There was an error")
}
}
}
您可以使用反射(如果正在检查字符串属性,则与字符串的.contains方法结合使用)来迭代实例变量的属性,并确定其中一个是否包含特定的字符串值。您还可以创建一个函数来访问结构/类的每个相关(字符串类型?)属性,以检查字符串值
如果您发布活动的代码定义,我们可以更具体地帮助您
下面是一个基本示例(无反射):
是一个字符串的方法,可以通过导入基础在我的例子中使用。如果您的意思是您的实际活动类没有.contains方法,那么这是正确的。事实并非如此。您必须创建自己的功能,因为您想要的功能似乎比.contains对字符串执行的简单检查更复杂。函数activityContainsString尝试创建该功能,遍历类定义中的每个字符串属性,检查这些属性中是否至少有一个包含作为参数提供的字符串,并根据需要返回true或false
如果需要,您甚至可以将函数重命名为contains,使其表面上类似于String的方法,并且可以以类似的方式调用它(确保函数位于活动定义内):这是使用其他帐户的转载吗?是我的合作伙伴。他写了一个不详细的问题,所以我在这里回答得更清楚了。。有希望地
import UIKit
import Foundation
protocol HomeModelDelegate
{
func itemsDownloaded(activities: [Activity])
}
class HomeModel: NSObject
{
var delegate:HomeModelDelegate?
func getItems()
{
let serviceUrl = "https://www.zzzway.com/dbusers.php"
let url = URL (string: serviceUrl)
if let url = url
{
let session = URLSession(configuration: .default)
let task = session.dataTask(with: url, completionHandler: { (data, response, error) in
if error == nil
{
self.parseJson(data!)
}
else
{
}
})
task.resume()
}
}
func parseJson(_ data:Data)
{
var actArray = [Activity]()
do {
let jsonArray = try JSONSerialization.jsonObject(with: data, options: []) as! [Any]
for jsonResult in jsonArray
{
let jsonDict = jsonResult as! [String:String]
let act = Activity (NumUser: jsonDict["NumUser"]!, cFirstname: jsonDict["cFirstname"]!, cLastname: jsonDict["cLastname"]!, cEmail: jsonDict["cEmail"]!, cPassword: jsonDict["cPassword"]!, NumPts: jsonDict["NumPts"]!, forgotpass: jsonDict["forgotpass"]!)
print (act)
actArray.append(act)
}
delegate?.itemsDownloaded(activities: actArray)
}
catch
{
print("There was an error")
}
}
}
import Foundation
struct Activity {
let numUser: Int
let cFirstName: String
let cLastName: String
let cEmail: String
let cPassword: String
let numPts: Int
let forgotPass: Bool
func activityContainsString(value: String) -> Bool {
if cFirstName.contains(value) {return true}
if cLastName.contains(value) {return true}
if cEmail.contains(value) {return true}
if cPassword.contains(value) {return true}
return false
}
}
let act = Activity(numUser: 5, cFirstName: "John", cLastName: "Doe", cEmail: "john@doe.com", cPassword: "password", numPts: 99, forgotPass: false)
print(act.activityContainsString(value: "magic")) // prints false
print(act.activityContainsString(value: "pass")) // prints true
func contains(_ value: String) -> Bool {
if cFirstName.contains(value) {return true}
if cLastName.contains(value) {return true}
if cEmail.contains(value) {return true}
if cPassword.contains(value) {return true}
return false
}
let act = Activity(numUser: 5, cFirstName: "John", cLastName: "Doe", cEmail: "john@doe.com", cPassword: "password", numPts: 99, forgotPass: false)
print(act.contains("magic")) // prints false
print(act.contains("pass")) // prints true