如何在Swift中的if-else语句中定义对象?

时间:2019-02-01 07:06:40

标签: swift

如果要满足条件,我想以某种方式定义对象,或者将其定义为不满足条件的其他对象。但是,当我稍后在代码中尝试使用该对象时,它不会将其识别为已定义。

我想要这样的东西

if condition {
    object = Class1()
} else {
    object = Class2()
}

5 个答案:

答案 0 :(得分:3)

您只需要更早地声明变量:

let object: RootClass
if condition {
    object = Class1()
} else {
    object = Class2()
}

其中RootClass是可以表示Class1Class2的类型。

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。使用协议:让我们声明协议MyProtocolClass1Class2都确认

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声明为optionalvar,并在以后为它分配一个值。

答案 4 :(得分:0)

您可以这样做

let classsObject =  condition ? Class1() : Class2()

?之后,您的条件正确,而在:之后,您的其他条件