首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swift 2.1,xcode 7.2。简单的新手,为什么它工作在游乐场,而不是在应用程序。

swift 2.1,xcode 7.2。简单的新手,为什么它工作在游乐场,而不是在应用程序。
EN

Stack Overflow用户
提问于 2016-02-28 23:12:10
回答 2查看 68关注 0票数 0

此代码在Playground中工作,但在Xcode 7.2中定义此代码时会出现编译错误

这是我的游乐场截图https://goo.gl/yJ4Q75

错误是:方法不覆盖超类中的任何方法。

代码语言:javascript
复制
public class A {
    private func myUnavailableMethod() {
        print("A. private func myUnavailableMethod()")
    }
}

public class B : A {  
    override func myUnavailableMethod() {
        print("B. func myUnavailableMethod()")
    }
}

这个游乐场的动机是一个错误,当试图覆盖一个方法时,编译器抱怨说“不可用”

代码语言:javascript
复制
class MySFSafariViewController: SFSafariViewController {
    override init() {

    }
}

当跳到目标C的时候。

代码语言:javascript
复制
@interface SFSafariViewController : UIViewController

/*! @abstract The view controller's delegate */
@property (nonatomic, weak, nullable) id<SFSafariViewControllerDelegate> delegate;

****- (instancetype)init NS_UNAVAILABLE;****
EN

回答 2

Stack Overflow用户

发布于 2016-02-28 23:38:08

在Swift中,私有/内部/公共的含义与其他一些语言不同。

如果在项目中将类作为两个单独的文件来处理,那么这是非常清楚的。

代码语言:javascript
复制
private - scope is visibility is the file that holds the code
internal - scope of visibility is the namespace
public - scope of visibility is full access from anywhere 

在Xcode游乐场中,它们都位于一个文件中,因此该方法对B类可见。

票数 1
EN

Stack Overflow用户

发布于 2016-02-28 23:15:21

类A的myUnavailableMethod是私有的,因此不能重写它。通过删除internal关键字将方法声明更改为private

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35689477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档