来自Apple的书"结构和类之间最重要的区别之一是结构在代码中传递时总是被复制,但类是通过引用传递的."
任何人都可以让我理解这意味着什么,对我来说,类和结构似乎是一样的.
首先,我想说,我知道在SO中有很多文章和问题引用了indirectSwift中的关键字.
最常用的解释indirect是允许递归枚举.
indirect我想知道它是如何允许我们使用递归枚举的,而不是只知道允许我们做什么.
是因为枚举是值类型,如果它们是以递归结构构建的,那么值类型不能很好地扩展?为什么?
indirect修改值类型行为是否更像行为类型?
以下两个例子编译得很好.有什么不同?
indirect enum BinaryTree<T> {
case node(BinaryTree<T>, T, BinaryTree<T>)
case empty
}
enum BinaryTree<T> {
indirect case node(BinaryTree<T>, T, BinaryTree<T>)
case empty
}
Run Code Online (Sandbox Code Playgroud) Swift书中有一些例子分别展示了相关的值和原始值,有没有办法用两个特征一起定义枚举?
我试图将它们组合在一起但却出错了:
enum Barcode :String {
case UPCA(Int, Int, Int) = "Order 1" // Enum with raw type cannot have cases with arguments
case QRCode(String) = "Order 2" // Enum with raw type cannot have cases with arguments
}
Run Code Online (Sandbox Code Playgroud) 如何更改枚举的特定关联值
enum Origin {
case search(searchTerm: String, filtered: Bool)
case category(categoryName:String, subcategoryName:String)
}
@objc class GameSession: NSObject
{
var gameOrigin: Origin?
...
@objc func setIsSearchFiltered(filtered:Bool)
{
if (<gameOrigin is of type .search?>)
{
self.gameOrigin = <change "filtered" associated value to new value>
}
}
....
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个问题的答案最近对我没有帮助。
StackOverflow上的某个人已经为这个问题提供了一个很好的答案:swift中原始值和相关值之间的区别是什么.
但是,该问题不包括何时使用原始值以及何时使用相关值的信息.这是我有点困惑的部分.如果有人可以向每个人解释,那将是非常重要的.我认为这是一个很快就会有很多初学者的问题.