我有一个init,它接受一个类的实例(我希望每个人都知道这意味着它是通过引用传递的)
我希望能够复制对象并存储在两个类实例变量中,这样,我有一个函数可以充当“重置”,它将设置我所做的任何更改某一点可以追溯到以前的样子。
如下所示:
convenience init(_ item:Item?){
self.init()
self.item = item
self.undoItem = item
}
func reset(){
self.item = self.undoItem
self.reloadInfo()
}
对于应该是一个相对简单的解决方案,我没有取得多大成功。我对Swift和iOS开发太新了。
答案 0 :(得分:0)
使用快速结构可能是您的选择。
struct Item {
//
}
Swift中的结构是值类型,它们是按值而不是引用复制的。
示例
struct Item {
var value: Int = 1
}
var item1 = Item()
var item2 = item1
item2.value = 20
print("\(item1.value)") // 1
print("\(item2.value)") // 20
在上面的示例中,item1.value
为1
,item2.value
为20
。
以下行创建item1的副本并将其分配给item2:
var item2 = item1
从这一行开始,item2
的任何更改都不会反映在item1
中。
结论
将Item
定义为struct
答案 1 :(得分:0)
在操场上写下以下内容(在朋友的帮助下):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Overflow Flex Box Issue</title>
<style type="text/css">
* {border: 0; margin: 0; padding: 0;}
aside
{
background-color: #afa;
order: 2;
width: 20%;
}
body
{
display: flex;
flex-direction: column;
height: 100%;
}
body > header
{
align-self: stretch;
background-color: #faa;
flex: 0 1 auto;
min-height: 56px;
order: 1;
}
body > footer
{
align-self: auto;
background-color: #aaf;
flex: 0 1 auto;
min-height: 36px;
order: 2;
}
html {height: 100%;}
main
{
background-color: #cfc;
order: 1;
width: 80%;
}
#body
{
display: flex;
order: 2;
overflow: auto;
}
</style>
</head>
<body>
<div id="body">
<main>
<article>
<p>article</p>
<p>article</p>
<p>article</p>
<div style="height: 10000px;">10,000px</div>
</article>
</main>
<aside><p><aside>, 100% height only of visible area, it <em>should</em> be <em>100% of total parent height</em>.</p></aside>
</div>
<header>The body > header element; element 2, order: 1;.</header>
<footer>The body > footer element; element 3, order: 3;.</footer>
</body>
</html>
这是一个很好的简单函数,因此我可以在swift中获取我的类实例的副本。在swift中,因为它们是引用类型(我不确定你是否可以取消引用它或诸如此类),你基本上每次都必须为你的对象编写一个自定义复制函数。好吧,现在我写了这个,所以只要你使用NSObject的子类并使用这个协议,你就可以了。
这完全符合我的代码