ios - Swift:递归值类型

标签 ios swift value-type

我有一个结构,我想在其中有一个 Struct 类型的全局变量?。这个示例本质上是我实际创建的结构的简化版本。

struct SplitString { //splits a string into parts before and after the first "/"

    var preSlash: String = String()
    var postSlash: SplitString? = nil

    init(_ str: String) {
        var arr = Array(str)
        var x = 0
        for ; x < arr.count && arr[x] != "/"; x++ { preSlash.append(arr[x]) }
        if x + 1 < arr.count { //if there is a slash
            var postSlashStr = String()
            for x++; x < arr.count; x++ {
                postSlashStr.append(arr[x])
            }
            postSlash = SplitString(postSlashStr)
        }
    }

}

但是,它会抛出错误:

Recursive value type 'SplitString' is not allowed

有什么办法可以解决这个问题吗?任何帮助都会很棒。谢谢:)

编辑: 如果相关的话,我是在 iOS 上编程,而不是 OSX。

编辑: 如果我有:

var split = SplitString("first/second/third")

我希望 split 是:

{preSlash = "first", postSlash = {preSlash = "second", postSlash = {preSlash = "third",
postSlash = nil}}}

最佳答案

我想这是因为 Optional 的行为类似于值类型。 所以你拥有的是一个值类型的值类型。一种值类型。

为了对值类型进行布局,您需要知道所涉及事物的大小。

所以你有(简化):

sizeof(SplitString) = sizeof(String) + sizeof(SplitString?)

sizeof(SplitString?) > sizeof(SplitString)

因为您需要存储值存在或不存在的事实(而且,不,sizeof(SplitString) 零的模式不是一个有效的表示形式,因为它对于类类型是这样的——为什么?想象一下整数?= 0)

那么,现在你有

sizeof(SplitString?) > sizeof(String) + sizeof(SplitString?)

但所有涉及的数量肯定 > 0。这很荒谬,对吧?

关于ios - Swift:递归值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26898992/

相关文章:

objective-c - objective-c 中的 block 递归

iphone - 从 XIB 创建时如何构建 UIImage?

c# - 通过反射获取可选 Guid 的默认值?

c# - 为什么从 <T> 到 <U> 的隐式转换运算符接受 <T?>?

c++ - 'value type' 的初始化没有匹配的构造函数

ios - 原子属性和非原子属性有什么区别?

swift - Swift Switch 会短路吗?

ios - 单击 GoogleSignIn 按钮时应用程序崩溃

class - 如何在swift中列出一个类的所有变量

ios - 使用 RestKIt 在核心数据实体中映射 json 对象