小编Den*_*Kim的帖子

Xcode只看到一些嵌套类的类似扩展,这些扩展是用不同的文件编写的

我试图保持我的代码尽可能可读,方法是保持方法和文件尽可能短,并使用嵌套类进行命名空间.除了一些非常奇怪的时刻,它工作正常.

我有一些用于命名空间的类.

class Space { }
Run Code Online (Sandbox Code Playgroud)

在该文件中使用的所有类都在它们自己的文件中作为扩展实现.

extension Space {
    class SomeClass {
       // implementation
    }
}
Run Code Online (Sandbox Code Playgroud)

其中一个SomeClasses有很多相当复杂的初始化程序,所以我将它们分成了自己的文件并按如下方式实现:

extension Space.SomeClass {
    convenience init(fromSomeSource source: SourceClass) {
        self.init()
        // other implementation
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是这些文件中的一些工作正常,但其中一些投掷'SomeClass' is not a member type of 'Space',我不知道为什么.

所有这些都很相似.唯一的区别是初始化器本身的实现.所有文件都保存在同一个地方,我不知道为什么有些文件可以正常工作,有些则没有.

我试图将代码从不工作的文件移动到工作正常的文件,并且工作正常--Xcode同意看到代码并且没有反对它.但是当相同的代码存在于自己的文件中时 - Xcode或编译器不想理解它SomeClass实际上是其成员Space.

我试图清理构建,包括手动转储~/Library/Developer/Xcode/DerivedData文件夹.什么都没有帮助.

当然,我可以将它全部放在一个文件中,它可以正常工作,但是在我的情况下它如此挑剔的原因是什么?


我试图创建一个新文件,然后从其中一个坏文件中移出所有内容.它可以工作,但只能使用某些文件名.有些名称再次出现相同的错误,但似乎如果名称是全新的并且与现有名称不相似 - 它可以正常工作.魔法?

xcode ios swift swift-extensions swift2

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

如何从具有相同名称的嵌套类型的类中引用全局类型?

我有一个在全局范围内声明的类,另一个具有相同名称的类嵌套在某个类中.

class Address {
    var someProperty: String?
}

class ThirdPartyAPI {
    class Address {
        var someOtherProperty: String?
        init(fromAddress address: Address) {
            self.someOtherProperty = address.someProperty
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是:如何从初始化中引用全局类而不是内部类?在给出的示例中,我遇到了错误Value of type 'ThirdPartyAPI.Address' has no member 'someProperty',这意味着编译器引用内部Address而不是全局内部.

scope nested-class scoping swift swift2

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

标签 统计

swift ×2

swift2 ×2

ios ×1

nested-class ×1

scope ×1

scoping ×1

swift-extensions ×1

xcode ×1