相关疑难解决方法(0)

快速语言中的结构与类

来自Apple的书"结构和类之间最重要的区别之一是结构在代码中传递时总是被复制,但类是通过引用传递的."

任何人都可以让我理解这意味着什么,对我来说,类和结构似乎是一样的.

swift

184
推荐指数
6
解决办法
7万
查看次数

如何在Swift中执行"Deep Copy"?

在Objective-C中,可以通过以下方式进行深度复制:

 Foo *foo = [[Foo alloc] init];
 Foo *foo2 = foo.copy;
Run Code Online (Sandbox Code Playgroud)

如何在Swift中进行深层复制?

deep-copy swift

20
推荐指数
4
解决办法
3万
查看次数

为什么结构体在类似Swift中没有deinitializers?

我刚刚阅读了关于deinitializers的Swift文档,发现它们只存在于类中.所以我只是想知道为什么Swift中的结构没有deinitializers?

swift

8
推荐指数
2
解决办法
1064
查看次数

使用inout关键字:是通过引用传递的参数还是通过copy-in copy-out(/call by value result)

问题:基于以下信息和讨论:inout参数是通过引用传递还是通过拷入拷出


基于以下SO线程,通过引用传递inout关键字标记的函数参数:

我们注意到最顶层的两个线程是 Swift 2.0 之前的;我在 SO 上找不到关于该主题的任何更新的讨论(除了有点相关的第三个线程链接)。


但是,根据 Apple 的文档(据我所知),由inout关键字标记的函数参数是通过copy-in copy-out(或按值调用结果)传递的

传入传出参数如下:

当函数被调用时,参数的值被复制。在函数体中,副本被修改。当函数返回时,副本的值被分配给原始参数。此行为称为拷入拷出或按值结果调用。...

... 您可以通过将 inout 关键字放在其参数定义的开头来编写输入输出参数。一个输入输出参数有一个传入函数的值,被函数修改,然后传回函数外来替换原来的值。...


现在我自己的例子试图调查这个:

struct MyStruct {
    private var myInt: Int

    mutating func increaseMyInt() {
        myInt++
    }

    func …
Run Code Online (Sandbox Code Playgroud)

swift2 inout

5
推荐指数
1
解决办法
1016
查看次数

Swift如何"传递价值"的对象

我是Swift的新手.我创建了一个类(例如):

class Fraction{
    var a: Int
    init(a:Int){
        self.a = a
    } 
    func toString() -> String{
        return "\(self.a)"
    }
}
Run Code Online (Sandbox Code Playgroud)

我还在其他类函数中构建了一个:

class func A_plusplus(f:Fraction){
    f.a++
}
Run Code Online (Sandbox Code Playgroud)

然后在执行课上我写道:

var object = Fraction(a:10)
print("before run func = " + object.toString())
XXXclass.A_plusplus(object)
print("after ran func =" + object.toString() )
Run Code Online (Sandbox Code Playgroud)

所以控制台输出是

在运行func = 10之前; 在运行func = 11之后

问题是如何发送"对象"的副本以保持其值等于10

如果函数总是按引用传递,为什么我们仍然需要关键字: "inout"

什么区别A_plusplus(&object)//[if I make the parameter to be a inout parameter]A_plusplus(object)

一般来说,我不想使用struct.虽然这将完全解决我的问题,但我很少通过值传递.所以我不希望程序的复制过程减慢用户手机的速度:(

似乎符合NSCopying协议是一个很好的选择.但我不知道如何实现该功能: func copyWithZone(zone: NSZone)-> AnyObject?正确

ios swift

4
推荐指数
1
解决办法
1万
查看次数

Swift对数组的引用?

我可能错过了关于swift的重要信息.我有一个包含键/快速数组对的映射.我更改了数组,地图中的数组没有改变.有人可以解释发生了什么吗?谢谢!

var map = [String:[String]]()
var list = [String]()
map["list"] = list //output: "["list": []]\n"
print(map)

list.append("test")
print(list)  //output: "["test"]\n"
print(map)   //output: "["list": []]\n"
Run Code Online (Sandbox Code Playgroud)

arrays swift

4
推荐指数
1
解决办法
3155
查看次数

Swift:构造还是不构造

我终于要从 Objective-C 切换到 Swift。我正在为我的客户创建一个视图布局系统,使他们的应用程序在布局上更加灵活,而不使用自动布局,因为他们想要远程设计他们的屏幕,而自动布局对他们来说太复杂了。我试图使用它来做这个structsprotocols但我发现它很笨拙,所以我怀疑我没有以正确的方式思考它。

对于类,结构如下:

class ViewModel {
    var frame: CGRect = .zero
}

class ViewGroupModel: ViewModel {
    var weight: Int = 1
    var children:[ViewModel] = [ViewModel]()
}

class HorizontalViewGroupModel: ViewGroupModel {
}

class VerticalViewGroupModel: ViewGroupModel {
}
Run Code Online (Sandbox Code Playgroud)

我试图通过定义一个ViewModel协议和一个ViewGroupModel协议来处理它,但我发现它创建了很多重复(属性)。有没有更好的方法?在这种情况下使用类会被认为是一个好习惯吗?

编辑:如果不使用类会更好,我正在寻找一个答案,该答案可以为我提供关于structs和的具体解决方案protocols

struct class ios swift

4
推荐指数
1
解决办法
1620
查看次数

无法更改数组中的元组

我正在尝试更改数组中的元组,但是,当我尝试 emo = (type:emo.type,strength:increaseStrength(emo.strength)) 它时会给我错误

"cannot assign to 'let' value 'emo'

这是我的代码:

var emotions : [(type : String, strength: Int)] = [("happy",0),("scared",0),("tender",0),("excited",0),("sad",0)]

func increaseStrength(i:Int)->Int {
    switch i {
    case 0: return 1
    case 1: return 2
    case 2: return 3
    case 3: return 0
    default :return 0
    }
}

@IBAction func HappyBA(sender: AnyObject) {
    for emo in emotions  {
        if (emo.type == "happy" ){
            emo = (type:emo.type,strength:increaseStrength(emo.strength))

        }
    }
    println(emotions)
}
Run Code Online (Sandbox Code Playgroud)

如果有更好的方法来完成任务请告诉我,我很感激!谢谢..

swift

3
推荐指数
1
解决办法
1683
查看次数

为什么不通过引用传递?

我正在做这样的事情:

someFunction(&myClass)
Run Code Online (Sandbox Code Playgroud)

someFunction在myClass上对数组进行排序.

someFunction(inout someclass:ClassA) {
 someClass.sort({$0.price > $1.price})  
}
Run Code Online (Sandbox Code Playgroud)

如果我在函数调用后打印myClass,我注意到数组仍未排序.据我所知,Swift通过复制传递值.但是当我使用inout时,它不应该改为通过引用传递吗?

swift

1
推荐指数
1
解决办法
870
查看次数

Swift结构突变变量不起作用?

即使mutating func在方法中使用关键字,我也无法修改模型类变量?

所以基本上我都包裹着我的问题,在一个非常简单的方法,我有一个类Car,拥有3个变量idstartmodelNo

之后,初始化一个空的Car模型数组,然后显示10个汽车,为迭代创建一个范围范围1...10,初始化Car模型类,并将其附加到原始的cars数组中。

前5个汽车ID为0,最后5个汽车ID为1的支票

我想要一个将在其中启动相同ID的最后一辆车的过滤器,因此我创建了一个过滤并修改start变量但无法修改的方法。您能帮我做错什么吗?

请查看我的完整代码,然后将其复制粘贴到操场上。

struct Car {
    var id = 0
    var start = false
    var modelNo: String

    init(start: Bool, id: Int, model: String) {
        self.start = start
        self.id = id
        self.modelNo = model
    }

    mutating func startCar(status: Bool) {
        start = status
    }
}

var arrCars:[Car] = [Car]()

for i in 1...10 {
    let md = Car(start: false, id: i <= 5 ? 0 : …
Run Code Online (Sandbox Code Playgroud)

struct ios swift mutating-function swift4

1
推荐指数
1
解决办法
1414
查看次数

标签 统计

swift ×9

ios ×3

struct ×2

arrays ×1

class ×1

deep-copy ×1

inout ×1

mutating-function ×1

swift2 ×1

swift4 ×1