当我定义了自己的同名类时,请参考Swift内置类



我有了自己的class:

 class Set{...}

我使用这个"Set"作为我的基本数据结构。今天我转向UI部分。

我尝试让textField resignFirstRespond,所以我覆盖以下函数:

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?)

你在这里看到泛型的"Set"了吗?然后问题来了->编译器告诉我类"Set"不具有任何泛型类型。所以我意识到这里的Set表示我自己的Set类。

关于可能的解决方案,我尝试过:输入一个"S"并使用"ESC"调用代码推荐器,我点击了右边的类。但是,它仍然表示自设计类。

所以谁能告诉我如何处理这个!谢谢你!

b.t.w。我也想改变我的类名,但是它有太多的相对点。我简直不敢相信XCode不能区分同名的类!

From https://developer.apple.com/library/ios/documentation/Swift

Swift的访问控制模型是基于模块和的概念源文件。

模块是代码分发的单个单元——一个框架或作为单个单元构建和交付的应用程序,并且可以

Xcode中的每个构建目标(如应用程序包或框架)都是在Swift中被视为一个单独的模块。如果你把各个方面组合在一起你的应用程序的代码作为一个独立的框架-也许封装并在多个应用程序中重用该代码—然后您可以使用的所有代码在框架内定义时将其作为单独模块的一部分是在一个应用程序中导入和使用,还是在另一个应用程序中使用框架。

源文件是模块内的单个Swift源代码文件效果,应用程序或框架中的单个文件)。虽然它是通常在单独的源文件中定义单独的类型源文件可以包含多个类型、函数和等等。

则可以使用import关键字或MyModule.MyClass区分两个名称相同的类。如果你查看文档,你会发现Set在模块Swift

override func touchesEnded(touches: Swift.Set<UITouch>, withEvent event: UIEvent?)

试试Swift.Set<UITouch>。这在playground中编译:

import UIKit
class Set { }
class MyView : UIView {
    override func touchesEnded(touches: Swift.Set<UITouch>, withEvent event: UIEvent?) {
    }
}

但是从实用的角度来说,重命名你的类会更好。

最新更新