有什么区别
你能给我一些例子吗?
来自Apple的书"结构和类之间最重要的区别之一是结构在代码中传递时总是被复制,但类是通过引用传递的."
任何人都可以让我理解这意味着什么,对我来说,类和结构似乎是一样的.
我试图让我的头围绕可变对象和不可变对象.使用可变对象会导致很多不良操作(例如,从方法中返回一个字符串数组),但我无法理解其中的负面影响.使用可变对象的最佳做法是什么?你应该尽可能地避开它们吗?
我有一个定义结构的快速框架:
public struct CollectionTO {
var index: Order
var title: String
var description: String
}
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法使用另一个导入库的项目中的隐式成员智能初始化程序.错误是'CollectionTO'无法初始化,因为它没有可访问的初始化程序.即它没有给出默认的隐式成员明智的初始化者public关键字.
var collection1 = CollectionTO(index: 1, title: "New Releases", description: "All the new releases")
Run Code Online (Sandbox Code Playgroud)
我必须添加我自己的init方法,如下所示:
public struct CollectionTO {
var index: Order
var title: String
var description: String
public init(index: Order, title: String, description: String) {
self.index = index;
self.title = title;
self.description = description;
}
}
Run Code Online (Sandbox Code Playgroud)
...但是如果还有其他人知道的话,我宁可不要这样做?
你能在Swift中继承enum吗?关于枚举继承,应该注意哪些规则?
以下测试代码:
enum TemperatureUnit: Int {
case Kelvin, Celcius, Farenheit
}
enum TemperatureSubunit : Temperature {
}
Run Code Online (Sandbox Code Playgroud)
生成
error: type 'TemperatureSubunit' does not conform to protocol 'RawRepresentable'
Run Code Online (Sandbox Code Playgroud) 我想在swift中不希望存储在堆栈/堆中的内容.我有一个很好的估计:你打印的所有东西和内存地址都不是值,它们存储在堆栈中,而是打印出的值是什么,它们在堆上,基本上根据值和引用类型.我完全错了吗?并且可选地,您是否可以提供堆栈/堆的可视化表示?
我知道swift会优化复制写入数组,但它会为所有结构执行此操作吗?例如:
struct Point {
var x:Float = 0
}
var p1 = Point()
var p2 = p1 //p1 and p2 share the same data under the hood
p2.x += 1 //p2 now has its own copy of the data
Run Code Online (Sandbox Code Playgroud) 我看过一些帖子像这样一个关于子类之间的差别NSObject在斯威夫特或者只是有其天然的基础class,没有子类.但他们都有点旧帖,我不清楚这个话题.
你NSObject什么时候应该继承?子类化和非子类化之间的实际区别是什么?目前Swift的推荐是什么?
我有,
struct S {}
Run Code Online (Sandbox Code Playgroud)
随着,
func y (x: S) -> AnyObject {}
Run Code Online (Sandbox Code Playgroud)
在Swift 2中,是否有可能在y()中,
return x
Run Code Online (Sandbox Code Playgroud)
我目前的代码:
struct S {let value: Int = 0}
let x = S()
func y(x: S) -> AnyObject {return x}
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
'S'类型的返回表达式不符合'AnyObject'类型
有没有办法缓解这种情况?