所以我一直在网上研究,我找不到这三个的简单定义。我知道An Enum和Struct可以包含属性,初始化器和方法,并且这两个数据结构也都通过' value'传递,但那几乎就是它......
我想知道,这3个(Enum,Structs,Classes)有什么区别?在每个最简单的定义?
答案 0 :(得分:8)
我认为Chris Upjohn对树屋中的主题提供了一个相当简单但很好的解释:
enum 被视为结构化数据类型,无需在您的内容中多次更改说出 String 或 Int 即可进行修改例如,下面的代码显示了意外更改内容并忘记将其更改为其他地方是多么容易。
let myString = "test"
if myString == "ttest" {
// Doesn't execute because "ttest" is the value assigned to "myString"
}
使用enum,我们可以避免这种情况,并且永远不必担心不止一次更改同一件事。
enum MyEnum: String {
case Test = "test"
}
let enumValue = MyEnum.Test
if enumValue == MyEnum.Test {
// Will execute because we can reassign the value of "MyEnum.Test" unless we do so within "MyEnum"
}
我不确定你对MVC模式有多了解,但在Swift中,这是一种常见的做法,在我解释结构是如何有用之前我将在Swift中快速概述MVC。 / p>
模型 - struct ,对于管理大量数据非常有用
查看 - 任何扩展 UIView 的内容,通常情况下,这是您在故事板上管理的控制器
控制器 - 类,通常仅用于 UIView 控制器和 UITableView 等视图
正如我所说,移动一个结构用于管理大量数据,例如,人类是一个很好的例子,因为我们可以使用结构来管理联系人列表中的每个人。
struct Birthday {
var day: Int
var month: Int
var year: Double
}
struct Person {
var firstName: String
var lastName: String
var birthday: Birthday
var phoneNumber: String
var emailAddress: Int
}
对于您拥有的每个联系人,您将创建一个新的 Person 对象,其中包含基本详细信息以及 Birthday 结构,以实现完全可重用性,使用的好处生日结构是我们可以扩展它而不破坏我们的代码的事实,例如,如果我们需要一种简单的方法来格式化人的生日,我们可以添加一个额外的功能而不影响我们的其余代码。
通常情况下,您只会找到绑定视图的类,当绑定到视图时,只要调用视图,iOS就会自动分配该类的新实例,第二次调用视图时,它会请求已创建的实例上课。
类的其他用途是实用程序帮助程序,您可以将其创建为单例,这更像是一个高级概念,通常您只需要在较大的应用程序上创建这样的代码,因为通常您需要的所有内容都已内置但是它和#39;如果您确实需要使用扩展名的其他功能,则建议您添加到任何内置对象并创建自己的下标。
免责声明:以下文字属于Chris Upjohn。我无法用Swift解释它(可能在一般的CS术语中,使用其他语言),因此我没有看到任何重写类似于此的点。
希望它有所帮助!
答案 1 :(得分:1)
<强>枚举吗
枚举代表有限数量的&#34;状态为&#34;。与许多其他语言中的枚举不同,它们不是存在状态的属性(例如,用作指定一个或多个最终变为整数或一起的标志的代理)。
enum StartuUpError : ErrorType{
case ShowStoppingBug(bugid: Int)
case TooManyDistractions
case NotEnoughTime
case NotEnoughFunding(shortFall: Int)
}
使用:强>
enum StartuUpError : ErrorType{
case ShowStoppingBug(bugid: Int)
case TooManyDistractions
case NotEnoughTime
case NotEnoughFunding(shortFall: Int)
}
class Startup {
var funding = 0
var completion = 0
var burnRate = 10000
var week = 0
func raiseCapital(amount: Int){
funding += amount
}
func completeWork(units: Int) throws{
week += units
funding -= burnRate
if funding < 0{
throw StartuUpError.NotEnoughFunding(shortFall: funding)
}
if completion >= 100{
print("Congratulations! You've been achieved! ")
}
}
}
let myStrtup = Startup()
myStrtup.raiseCapital(25000)
do{
let weeklyWOrk = 20
for _ in 1...3{
try myStrtup.completeWork(weeklyWOrk)
print("At week \(myStrtup.week), tried to do \(weeklyWOrk) uits of work")
}
}catch{
if let error = error as? StartuUpError{
switch error{
case .NotEnoughFunding(let shortFall):
print("Ran out of funding! ShortFall:\(shortFall)")
default:
print("Some other problem")
}
}
}
<强> STRUCT吗
struct基本上是一个基类型。它无法扩展,虽然可以对其执行功能,但它们只应提供有关该类型的其他信息。简而言之,它是由属性集合(可以是常量或变量)定义的类型
struct slidingDoor : Door{
var isLocked : Bool = false
func open() {
print("Whoooshh")
}
func close() {
print("whooosh")
}
var description : String{
return "Smooth sliding door"
}
}
使用
class BankValut : Door{
var isLocked : Bool = true
func open() {
if isLocked{
print("Locked !")
}else{
print("Clang!")
}
}
func close() {
print("Slamm")
isLocked = true
}
func unlock(combination : String){
isLocked = false
}
var description: String {
if isLocked {
return "A bank vault that is locked"
} else {
return "An unlocked bank vault"
}
}
}
let door1 = slidingDoor()
door1.open(
)
<强>类吗
也许事情变得更容易了。如果没有其他人可以使用,请使用这个!但是,我认为这里有一些特征对于构建一个可以利用所有这些语言支持类型的好处的优秀OO模型非常重要
有关详细说明Refer this
答案 2 :(得分:0)