如果要满足条件,我想以某种方式定义对象,或者将其定义为不满足条件的其他对象。但是,当我稍后在代码中尝试使用该对象时,它不会将其识别为已定义。
我想要这样的东西
if condition {
object = Class1()
} else {
object = Class2()
}
答案 0 :(得分:3)
您只需要更早地声明变量:
let object: RootClass
if condition {
object = Class1()
} else {
object = Class2()
}
其中RootClass
是可以表示Class1
和Class2
的类型。
Swift明确的初始化规则将确保object
在使用它的每条路径上都获得一个值。
答案 1 :(得分:1)
如果出于某种奇怪的原因,您的Class1和Class2不相关,则可以执行以下操作
var object: Any
if condition {
object = "something"
} else {
object = 32
}
,以后将其用作
if let some = object as? Int {
//do int stuff
} else if let some = object as? String {
//do string stuff
}
答案 2 :(得分:1)
有多种方法,在Swift
中类型必须匹配,因此不能基于条件为同一对象分配两种不同类型的类,因此可以使用Protocol
(更加快捷)或Inheritance
1。使用协议:让我们声明协议MyProtocol
,Class1
和Class2
都确认
protocol MyProtocol { }
class Class1: MyProtocol { }
class Class2: MyProtocol { }
现在,初始化对象时:
var object: MyProtocol
if condition {
object = Class1()
} else {
object = Class2()
}
或:
let object = condition ? Class1() : Class2()
2。使用继承
class MainClass() { }
class Class1: MainClass { }
class Class2: MainClass { }
let object = condition ? Class1() : Class2()
3。使用任何类型
let object: Any = condition ? Class1() : Class2()
if object is MyClass1 {
} else {
}
答案 3 :(得分:0)
您可以尝试
let object = condition ? Class1() : Class2()
您也可以将object
声明为optional
和var
,并在以后为它分配一个值。
答案 4 :(得分:0)
您可以这样做
let classsObject = condition ? Class1() : Class2()
在?
之后,您的条件正确,而在:
之后,您的其他条件