La proprietà non può essere dichiarata pubblica perché il suo tipo utilizza un tipo interno


101

Ho creato due classi ContenteBucket . Bucketcontiene un array di Contentoggetti e lo espone tramite una proprietà pubblica. Tuttavia, quando lo faccio, ricevo l'errore:

La proprietà non può essere dichiarata pubblica perché il suo tipo utilizza un tipo interno

inserisci qui la descrizione dell'immagine

Qualche idea sul motivo per cui questo genera un errore?


Sarebbe bello vedere un modo per esporre al pubblico solo una lezione di base, comepublic(Array<NSObject>) let contents: Array<Content>
Ben Leggiero,

Risposte:


175

Devi dichiarare anche il livello di accesso della Contentclasse public.

public class Content {
   // some code
}

Come indicato nella documentazione :

Una variabile pubblica non può essere definita come di tipo interno o privato, poiché il tipo potrebbe non essere disponibile ovunque venga utilizzata la variabile pubblica.

Le classi sono dichiarate come internalpredefinite, quindi devi aggiungere la publicparola chiave per renderle pubbliche.

Una regola simile esiste anche per le funzioni.

Una funzione non può avere un livello di accesso più alto rispetto ai suoi tipi di parametro e tipo restituito, perché la funzione potrebbe essere utilizzata in situazioni in cui i suoi tipi costituenti non sono disponibili per il codice circostante.


3
Bella risposta. Ho anche scoperto che l'errore non sarebbe scomparso fino al riavvio di Xcode (9.2).
Jasongiss

9

Content deve essere dichiarato pubblico anche:

public class Content {}

A seconda del tuo caso d'uso potresti anche dichiarare Bucketinterno. publicIn questo caso, ometti la parola chiave.


1

Il mio problema era un problema di spazio dei nomi.

Avevo dichiarato un'enumerazione chiamata Datae questo era un problema con la Dataclasse Swift , in particolare una imageData: Dataproprietà all'interno di un modello Core Data.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.