Swift : 在每个子类中导入 UIKit?
Swift : import UIKit in each subclass?
在objective-C中我们可以这样做:
一个。在 super class
中导入文件
#import "MyAwesomeClass.h"
@interface MySuperViewController : UIViewController
@end
@implementation MySuperViewController
- (void)viewDidLoad {
[super viewDidLoad];
//MyAwesomeClass allocated, initialized, used
MyAwesomeClass *awesomeClass = [MyAwesomeClass new];
}
@end
b。使用在 superclass 中导入的文件,在 subclass 中无需重新导入它
@interface MySubViewController : MySuperViewController
@end
@implementation MySubViewController
- (void)viewDidLoad {
[super viewDidLoad];
//No compilation error, since MyAwesomeClass already imported in superclass
MyAwesomeClass *awesomeClass = [MyAwesomeClass new];
}
@end
尝试在 swift 中做同样的事情会出现编译错误:
一个。在 MySuperViewController 中导入 UIKit
import UIKit
class MySuperViewController : UIViewController {
@IBOutlet weak var enterPrice: UITextField!
}
b。在 MySubViewController
中声明和使用 UITextField 对象而不导入 UIKit
class MySubViewController: MySuperViewController {
// compilation error at below line
@IBOutlet weak var myButton: UIButton!
}
有什么方法可以避免在上述情况下重新导入 UIKit 吗?请提出建议。
简答:
是的。据我了解,您需要在项目的每个 Swift 文件 中导入所需的所有框架(这是 file-by-file 要求,而不是 class by class。如果你在一个文件中定义了 2 个 classes,你只需要在文件顶部导入一个。)
C 中的#import/#include 语句是预处理器指令。就好像被包含文件中的代码在include的位置是copy/pasted。如果您在 superclass 的 header 中包含 header,superclass 的 header 现在包含扩展的内容。因此,当您将 superclass header 包含在您的 subclass 中时,系统框架 header 将作为 superclass [=24= 的一部分包含在内].
Swift 工作方式略有不同。
如果您在 Swift 项目中使用任何 objective-C class 并在该 class 中导入 UIKit,您实际上不必在项目的其他任何地方使用 import UIKit
指令!
所以基本上:
- 将您的 objective-C .m and/or .h 文件拖放到您的项目中。如有必要,选择复制文件。确保为该文件排序所有依赖项。
- (可选)Xcode 应该会提示您创建桥接 header,如果是,请继续执行第 4 步...但如果不是,则必须添加一个header 文件并将其命名为 YourProjectName-Bridging-Header.h.
- (可选)如果您手动添加它,请进入项目设置并搜索 Swift 编译器。在常规部分,有一个地方可以放置您刚刚创建的文件的路径。
- 在桥接 header 中,通过
#import "MyClass.h"
将 objective-c class(es) 导入您的项目
就是这样!您现在可以自由地从每个文件中删除您的 import UIKit
语句。值得注意的是,从风格上和代码重用的目的,最好在每个文件中包含所有导入,这样每个人都可以一目了然地看到有哪些依赖项,但是当您创建 ViewControllers 等时,我认为这样做有点愚蠢在每个文件中导入 UIKit。每个人都知道它依赖于 UIKit,而且您很可能不会在另一个项目中重复使用 UI。
在objective-C中我们可以这样做:
一个。在 super class
中导入文件#import "MyAwesomeClass.h"
@interface MySuperViewController : UIViewController
@end
@implementation MySuperViewController
- (void)viewDidLoad {
[super viewDidLoad];
//MyAwesomeClass allocated, initialized, used
MyAwesomeClass *awesomeClass = [MyAwesomeClass new];
}
@end
b。使用在 superclass 中导入的文件,在 subclass 中无需重新导入它
@interface MySubViewController : MySuperViewController
@end
@implementation MySubViewController
- (void)viewDidLoad {
[super viewDidLoad];
//No compilation error, since MyAwesomeClass already imported in superclass
MyAwesomeClass *awesomeClass = [MyAwesomeClass new];
}
@end
尝试在 swift 中做同样的事情会出现编译错误:
一个。在 MySuperViewController 中导入 UIKit
import UIKit
class MySuperViewController : UIViewController {
@IBOutlet weak var enterPrice: UITextField!
}
b。在 MySubViewController
中声明和使用 UITextField 对象而不导入 UIKitclass MySubViewController: MySuperViewController {
// compilation error at below line
@IBOutlet weak var myButton: UIButton!
}
有什么方法可以避免在上述情况下重新导入 UIKit 吗?请提出建议。
简答:
是的。据我了解,您需要在项目的每个 Swift 文件 中导入所需的所有框架(这是 file-by-file 要求,而不是 class by class。如果你在一个文件中定义了 2 个 classes,你只需要在文件顶部导入一个。)
C 中的#import/#include 语句是预处理器指令。就好像被包含文件中的代码在include的位置是copy/pasted。如果您在 superclass 的 header 中包含 header,superclass 的 header 现在包含扩展的内容。因此,当您将 superclass header 包含在您的 subclass 中时,系统框架 header 将作为 superclass [=24= 的一部分包含在内].
Swift 工作方式略有不同。
如果您在 Swift 项目中使用任何 objective-C class 并在该 class 中导入 UIKit,您实际上不必在项目的其他任何地方使用 import UIKit
指令!
所以基本上:
- 将您的 objective-C .m and/or .h 文件拖放到您的项目中。如有必要,选择复制文件。确保为该文件排序所有依赖项。
- (可选)Xcode 应该会提示您创建桥接 header,如果是,请继续执行第 4 步...但如果不是,则必须添加一个header 文件并将其命名为 YourProjectName-Bridging-Header.h.
- (可选)如果您手动添加它,请进入项目设置并搜索 Swift 编译器。在常规部分,有一个地方可以放置您刚刚创建的文件的路径。
- 在桥接 header 中,通过
#import "MyClass.h"
将 objective-c class(es) 导入您的项目
就是这样!您现在可以自由地从每个文件中删除您的 import UIKit
语句。值得注意的是,从风格上和代码重用的目的,最好在每个文件中包含所有导入,这样每个人都可以一目了然地看到有哪些依赖项,但是当您创建 ViewControllers 等时,我认为这样做有点愚蠢在每个文件中导入 UIKit。每个人都知道它依赖于 UIKit,而且您很可能不会在另一个项目中重复使用 UI。