无法在Swift中的相同class中根据条件分配不同的变量类型
Unable to assign different variable types according to condition in same class in Swift
我需要根据这个声明变量isCandidateResult == false or true
这里isCandidateResult == false
比FilterData
Class需要分配
var jobType: [String] = []
var jobRole: String = ""
和isCandidateResult == true
var jobType: String = ""
var jobRole: [String] = []
可是我怎么办不到
代码: 为了实现我的目标,我已经尝试过这样的代码但是..使用这段代码我遇到了以下错误
import UIKit
var isCandidateResult: Bool = false
if isCandidateResult == false{//Error: Statements are not allowed at the top level
class FilterData {
var jobType: [String] = []
var jobRole: String = ""
init(jobType: [String], jobRole: String) {
self.jobType = jobType
self.jobRole = jobRole
}
}
}
else{
class FilterData {
var jobType: String = ""
var jobRole: [String] = []
init(jobType: String, jobRole: [String]) {
self.jobType = jobType
self.jobRole = jobRole
}
}
}
class FilterViewController: UIViewController {
@IBOutlet weak var filterTableView: UITableView!
@IBOutlet weak var subFilterTableView: UITableView!
@IBOutlet weak var filterTitle: UILabel!
if isCandidateResult == false{
var filterData = FilterData(jobType: [], jobRole: "")//Cannot find 'FilterData' in scope
}
elase{
var filterData = FilterData(jobType: "", jobRole: [])
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
错误:
1)
Statements are not allowed at the top level
2)
Cannot find 'FilterData' in scope
不应该这样做。
相反,创建一个可以用工作类型和角色初始化的模型,或者用工作角色和类型初始化的模型,UITableView
的模型。这样,您就无需关心是工作类型和角色还是其他。您只填充模型。并让tableview管理自己的数据。它不需要知道里面是什么。
struct FilterTableViewModel {
let title: String
let elements: [String]
init(jobType: String, roles: [String]) {
title = jobType
elements = roles
}
init(jobRole: String, types: [String]) {
title = jobRole
elements = types
}
}
并且:
class FilterViewController: UIViewController {
var filterData: [FilterTableViewModel] = []
}
我需要根据这个声明变量isCandidateResult == false or true
这里isCandidateResult == false
比FilterData
Class需要分配
var jobType: [String] = []
var jobRole: String = ""
和isCandidateResult == true
var jobType: String = ""
var jobRole: [String] = []
可是我怎么办不到
代码: 为了实现我的目标,我已经尝试过这样的代码但是..使用这段代码我遇到了以下错误
import UIKit
var isCandidateResult: Bool = false
if isCandidateResult == false{//Error: Statements are not allowed at the top level
class FilterData {
var jobType: [String] = []
var jobRole: String = ""
init(jobType: [String], jobRole: String) {
self.jobType = jobType
self.jobRole = jobRole
}
}
}
else{
class FilterData {
var jobType: String = ""
var jobRole: [String] = []
init(jobType: String, jobRole: [String]) {
self.jobType = jobType
self.jobRole = jobRole
}
}
}
class FilterViewController: UIViewController {
@IBOutlet weak var filterTableView: UITableView!
@IBOutlet weak var subFilterTableView: UITableView!
@IBOutlet weak var filterTitle: UILabel!
if isCandidateResult == false{
var filterData = FilterData(jobType: [], jobRole: "")//Cannot find 'FilterData' in scope
}
elase{
var filterData = FilterData(jobType: "", jobRole: [])
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
错误: 1)
Statements are not allowed at the top level 2) Cannot find 'FilterData' in scope
不应该这样做。
相反,创建一个可以用工作类型和角色初始化的模型,或者用工作角色和类型初始化的模型,UITableView
的模型。这样,您就无需关心是工作类型和角色还是其他。您只填充模型。并让tableview管理自己的数据。它不需要知道里面是什么。
struct FilterTableViewModel {
let title: String
let elements: [String]
init(jobType: String, roles: [String]) {
title = jobType
elements = roles
}
init(jobRole: String, types: [String]) {
title = jobRole
elements = types
}
}
并且:
class FilterViewController: UIViewController {
var filterData: [FilterTableViewModel] = []
}