2016-12-07 2 views
3

내부이기 때문에 수업 공개를 선언 할 수 없습니다하지만 난 할 수 없었다 .스위프트 : 그 슈퍼 클래스</p> <pre><code>class RewardsAndRedemptionModel:BaseObject { var rewardHistory :[RewardHistoryModel]! } </code></pre> <p>이 내가 공공 클래스를 만들려고 노력하고있는 곳입니다 아래와 같이 나는 대중과 클래스를 선언하려고

public class RewardHistoryModel :BaseObject { 
var rewardValue : String! 
var recordedByName : String! 
var rewardFor : String! 
} 

심지어 인터넷에서 제공되는 문서를 읽었을 때 도움이되지 못했습니다.

+0

"해당 수퍼 클래스가 내부"입니다. 너에게 이해가 되니? 컴파일러에서 알려주는 문제를 해결하려고 노력 했습니까? – jtbandes

+1

예. 그러나 나는 그것이 무슨 말인지 이해하지 못했습니다 – Sam

+0

https://developer.apple.co.kr/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html – Sahil

답변

0

BaseObject 클래스를 public으로 선언해야합니다.

4

컴파일러는 수퍼 클래스가 내부 클래스이므로 public으로 설정할 수 없다고 알려줍니다. 컴파일러는 거짓말하지 않습니다.

수퍼 클래스보다 하위 클래스에 액세스 할 수 없습니다. 왜? 이런 방식으로 생각해 보면, 서브 클래스는 슈퍼 클래스에있는 모든 속성과 멤버를가집니다. 이 제한이 없으면 액세스 수정자가 더 이상 유용하지 않습니다. 내부 수업이 있습니다. 다른 누군가가 내부 클래스를 하위 클래스로 선언하고 public으로 선언합니다. 이제 캡슐화가 깨졌습니다. 액세스하지 않으려는 것은 하위 클래스를 통해 액세스 할 수 있습니다.

즉, 하위 클래스가 상위 클래스보다 액세스하기 쉬운 경우 상위 클래스의 액세스 한정자가 적용되지 않습니다. 그것이 컴파일러가이 제한을 갖는 이유입니다 : 당신이 쓰는 것은 수퍼 클래스의 접근 수정자가 효과를 잃어 버리게 만들 수 있음을 상기시켜주는 것입니다. 아마도 당신은 틀린 일을하고있을 것입니다.

문제를 해결하려면 BaseClass 및 해당 수퍼 클래스를 public으로 선언하십시오. 스위프트

2

3

당신은 public 또는 open 등의 기능 또는 변수와 같은 & 내부 구성원 (오픈은 빠른 3에서 사용할 수 있습니다)에 RewardHistoryModel & BaseObject 클래스의 액세스 수준을 선언해야합니다. 문서 (The Swift Programming Language - Access Control)에 명시된 바와 같이

public class BaseObject { 
    // set member of this class as public that you want to access outside (Project/Framework Level) 
} 

public class RewardHistoryModel :BaseObject { 
// set members as public or open - // open is available in swift 3. 
public (or open) var rewardValue : String! 
public (or open) var recordedByName : String! 
public (or open) var rewardFor : String! 
} 

: 유형이 모든 곳에서 사용하지 못할 수 있기 때문에, 공용 변수가 내부 또는 개인 유형을 가진 것으로 정의 할 수 없습니다

그 공용 변수 사용.

클래스는 기본적으로 내부 용으로 선언되므로 public 키워드를 추가하여 public으로 만들어야합니다.

비슷한 규칙이 함수에도 있습니다.

매개 변수 유형과 반환 유형보다 함수의 액세스 수준이 높을 수 없습니다. 구성 유형을 주변 코드에서 사용할 수없는 상황에서이 함수를 사용할 수 있기 때문입니다.