2016-02-28 3 views
0

Этот код работает в Playground, но я получаю ошибку компиляции, когда я определяю это в моем проекте в Xcode 7.2swift 2.1, xcode 7.2. простой NewBie о том, почему она работает в детской площадке, но не в приложении

Вот мой скриншот площадки https://goo.gl/yJ4Q75

ошибка: метод не отменяет любой метод в родительском классе

public class A { 
    private func myUnavailableMethod() { 
     print("A. private func myUnavailableMethod()") 
    } 
} 

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

Мотивация к этой детской площадке была ошибка при попытке переопределить метод, компилятор комп как «Недоступно»

class MySFSafariViewController: SFSafariViewController { 
    override init() { 

    } 
} 

---- НАЙДЕНО, КАК ОНИ ОТМЕТИЛ метод, который недоступен.

При переходе к объявлению Objective C.

@interface SFSafariViewController : UIViewController 

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

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

ответ

0

myUnavailableMethod класса А является частным, поэтому он не может быть отменено. Измените объявление метода на internal, удалив ключевое слово private.

+0

но почему не игровой площадки жалуется об этом? – jcalloway

+0

Кстати, я знаю, что личное означает --- отсюда именование метода «myUnavailableMethod» – jcalloway

1

Значение частного/внутреннего/общественного в Swift отличается по сравнению с некоторыми другими языками.

IF, и это IF, если у вас есть классы как два отдельных файла в проекте, то это довольно ясно.

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 Playground их оба в одном файле, так что метод виден класс В.

+0

, так есть способ отметить метод как «не видимый вообще ничего вне класса»? Я пробовал внутренне, и он вел себя так же, как и частный на Playground – jcalloway

+0

nope, единственный способ сохранить его «class-private», как вы описываете, - иметь его как «единственного владельца файла», и это сделает метод de -факто невидимым для кого-либо еще. –

+0

Итак, чтобы продолжить это, я увидел ошибку в следующем коде и пытался имитировать ее на Playground. – jcalloway