微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift:在每个子类中导入UIKit?

在Objective-C中,我们可以这样做:

一个.导入超类中的文件

#import "MyAwesomeClass.h"

@interface MySuperViewController : UIViewController
@end

@implementation MySuperViewController
- (void)viewDidLoad {
  [super viewDidLoad];

  //MyAwesomeClass allocated,initialized,used
  MyAwesomeClass *awesomeClass = [MyAwesomeClass new];
}
@end

湾使用在超类中导入的文件,在子类中不重新导入它

@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!
}

湾声明和使用UITextField的对象而不在MySubViewController中导入UIKit

class MySubViewController: MySuperViewController {
    // compilation error at below line
    @IBOutlet weak var myButton: UIButton!
}

有什么办法可以避免在上面的场景中重新导入UIKit吗?请建议.

简短回答:

是.我的理解是你需要导入项目中每个Swift文件所需的所有框架(这是一个逐个文件的要求,而不是逐个类.如果你在一个文件中定义了两个类,你只需要一个导入文件的顶部.)

C中的#import / #include语句是预处理程序指令.就好像包含文件中的代码被复制/粘贴在include的位置.如果在超类的标题中包含标题,则超类的标题现在包含展开的内容.因此,当您在子类中包含超类标头时,系统框架标头将作为超类标头的一部分包含在内.

Swift的工作方式略有不同.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐