ไม่สามารถประกาศพร็อพเพอร์ตี้สาธารณะได้เนื่องจากประเภทของมันใช้ประเภทภายใน


101

ฉันสร้างสองคลาสContentและBucket. Bucketมีอาร์เรย์ของContentวัตถุและเปิดเผยผ่านคุณสมบัติสาธารณะ อย่างไรก็ตามเมื่อฉันทำเช่นนั้นฉันได้รับข้อผิดพลาด:

ไม่สามารถประกาศพร็อพเพอร์ตี้สาธารณะได้เนื่องจากประเภทของมันใช้ประเภทภายใน

ป้อนคำอธิบายภาพที่นี่

มีความคิดเห็นว่าเหตุใดจึงเกิดข้อผิดพลาด


คงจะดีไม่น้อยหากได้เห็นวิธีที่จะเปิดเผยเฉพาะคลาสพื้นฐานต่อสาธารณะเช่นpublic(Array<NSObject>) let contents: Array<Content>
Ben Leggiero

คำตอบ:


175

คุณต้องประกาศระดับการเข้าถึงของContentคลาสแบบสาธารณะด้วย

public class Content {
   // some code
}

ตามที่ระบุไว้ในเอกสาร :

ไม่สามารถกำหนดตัวแปรสาธารณะว่ามีประเภทภายในหรือไพรเวตได้เนื่องจากประเภทอาจไม่พร้อมใช้งานทุกที่ที่ใช้ตัวแปรสาธารณะ

ชั้นเรียนจะถูกประกาศเป็นinternalค่าเริ่มต้นดังนั้นคุณต้องเพิ่มpublicคำหลักเพื่อให้เป็นแบบสาธารณะ

มีกฎที่คล้ายกันสำหรับฟังก์ชันเช่นกัน

ฟังก์ชันไม่สามารถมีระดับการเข้าถึงที่สูงกว่าประเภทพารามิเตอร์และประเภทการส่งคืนได้เนื่องจากฟังก์ชันนี้สามารถใช้ในสถานการณ์ที่ประเภทองค์ประกอบของรหัสรอบข้างไม่สามารถใช้ได้


3
คำตอบที่ดี ฉันยังพบว่าข้อผิดพลาดจะไม่หายไปจนกว่า Xcode (9.2) จะเริ่มต้นใหม่
Jasongiss

9

Content จะต้องประกาศเป็นสาธารณะด้วย:

public class Content {}

ขึ้นอยู่กับการใช้งานของคุณคุณอาจประกาศBucketว่าเป็นภายในด้วย เพียงแค่ละเว้นpublicคำหลักในกรณีนี้


1

ปัญหาของฉันคือปัญหาเนมสเปซ

ฉันได้ประกาศ enum ที่เรียกว่าDataและนั่นเป็นการโกงกับDataคลาสSwift โดยเฉพาะimageData: Dataคุณสมบัติภายในโมเดลข้อมูลหลัก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.