swift 3 : Class and Struct Optionals

标签 swift class struct option-type

我正在从编码 Obj-c 过渡到 Swift 3 很长一段时间。所以我想我理解可选项的概念,但我对这个问题感到困惑。假设我有一个名为 Monster 的类。我还有一个名为 Town 的结构。

struct Town {
    var population: Int = 0
    var name: String?
    var hasSherrif: Bool?
    var hasTheater: Bool?
    var hasTownhall: Bool?
    var hasSchool: Bool?
    var hasGeneralStore: Bool?
    var numOfHomes: Int = 0
}

和怪物...

class Monster {
    var town: Town?
    var name: String?

    func moveToTown(_ thisTown: Town) {
        town = thisTown
        if let strName = name, let strTownName = town?.name {
            print("\(strName) moved to \(strTownName)")
        } else if let strName = name {
            print("\(strName) move to a town with no name")
        } else {
            print("The monster moved to a town. Might help if you give stuff names, just saying.")
        }

    }
}

在 moveToTown(_ thisTown: Town) 中,我如何检查 Monster 是否没有名字而 Town 有?我想改变这一行:

} else if let strName = name {

类似于

} else if let strName = name && town?.name == nil {

然后再添加一个条件

} else if strName == nil && let strTownName = town?.name {
}

谢谢,如果有任何一般性问题可以清理,请随时提出批评。

最佳答案

您不能使用 town?.name 因为 town 不是可选的。

并且不需要 town = thisTown 行。只需将参数命名为 town

我会这样写:

func moveToTown(_ town: Town) {
    if let name = name {
        if let townName = town.name {
            print("\(name) moved to \(townName)")
        } else {
            print("\(name) move to a town with no name")
        }
    } else {
        print("The monster moved to a town. Might help if you give stuff names, just saying.")
    }
}

关于 swift 3 : Class and Struct Optionals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063370/

相关文章:

swift - 我的函数 swift 2 有很多错误

swift - 创建具有多个计算函数的简单类( )

c++ - 什么时候应该在 C++ 中使用类和结构?

variables - 快速全局变量

swift - 添加 SwiftCharts

c++ - 是否可以在 C++ 中不使用堆来创建类 String?

c# 访问所有可用的 css 列表或属性集合

c - 使用 AES 加密文件

C 语言 - 来自不兼容指针类型的类型赋值 [默认启用]

ios - GameKit、GKGameSession 如何将玩家添加到 session 中并发送数据?