Xcode 10 - literały obrazu nie są już dostępne


95

Xcode 10 Release Notes: „Code Completion for Swift image literals zostało usunięte w Xcode 10”

Więc to nie jest błąd, że nie mogłem dodawać obrazów w kodzie (i uruchamiać starszych projektów). W jaki sposób od teraz dodamy obrazy w kodzie, ponieważ samo wpisanie UIImageView(image:nie zaakceptuje żadnego pliku png ani jpeg.

let cellImage: UIImageView = {
    let image = UIImageView(image: ???))

    return image
}()

System: macOS Mojave
Xcode: Xcode 10 Beta 4


UIImage(named: "myImage")jak za dawnych czasów (?)
Alladinian

Godne uwagi: usunięto tylko uzupełnianie kodu dla literałów obrazu . Same literały obrazu nadal działają dobrze w XCode 10 z Swift 4.2.
iSofia

@isofia no, nie robią tego, ponieważ nie możesz takiego zrobić.
mat.

3
to niefortunne, dosłowne zakończenie obrazu było fajną funkcją
Eric Armstrong

2
Możliwe duplikaty sugestii
JD.

Odpowiedzi:


125

W Xcode 10 i Swift 4.2 tylko funkcja uzupełniania kodu (lub autouzupełniania) środowiska Xcode IDE została wycofana ze starego sposobu. Oto nowy sposób:

Po prostu wpisz, image literala zakończy się domyślną ikoną.

wprowadź opis obrazu tutaj

 

Kliknij dwukrotnie tę ikonę, aby otworzyć bibliotekę multimediów po prawej stronie.

wprowadź opis obrazu tutaj

 

Po prostu wybierz swój obraz i działa jak wcześniej!

wprowadź opis obrazu tutaj


63
W ten sposób nie można znaleźć obrazu według nazwy. A mój projektant dał mi wszystkie zasoby w postaci białego na przezroczystym png, więc wszystkie miniatury są renderowane jako czysta biel w przypadkowej kolejności ... który obraz jest niemożliwy do wybrania. -_-
Cœur

2
Cześć Coeur, proszę, powiedz swojemu projektowi, aby umieścił wszystkie obrazy na szaro, a następnie zmień swoje zasoby na szablon, a następnie możesz go zabarwić na Storyboard lub kod :)
Daniel Arantes Loverde

Tutaj jest normalnie, kliknij dwukrotnie otwórz listę
Daniel Arantes Loverde

@ Cœur to nie jest niemożliwe, ale jest to trudne, jeśli przejdziesz przez projekt, #imageLiteral to tylko graficzna reprezentacja tokenizowanego ciągu, dzięki czemu można go przeszukiwać za pomocą find (#imageLiteral w Twoim bieżącym folderze) :)
Dominik Bucher

@DominikBucher minęły dwa lata, a teraz używam Xcode 12, więc należy użyć przycisku + + Llub + w prawym górnym rogu Xcode.
Cœur

98

Znaleziono skrót, aby otworzyć kartę Biblioteka multimediów:

+ +M

W tym momencie oficjalna dokumentacja nie obejmuje niektórych przypadków użycia w Xcode 10 beta, więc nie jestem w stanie znaleźć sposobu na przeniesienie części multimedialnej do starej pozycji.


7
Tak źle, że nie mogę wpisać enter, aby wstawić element. Muszę użyć kursora myszy, aby przeciągnąć element do kodu -.-
fl034

4
Biblioteka multimediów nie wstawia odpowiedniego literału obrazu, chociaż ... umieszcza 3 literały obrazu odnoszące się do 3 różnych rozdzielczości obrazu.
Joshua Sullivan

Jeśli usuniesz pierwsze dwa, nadal działa. Taki bałagan, Apple.
CIFilter

53

Możesz użyć biblioteki multimediów w Xcode, aby dodać literał obrazu do swojego kodu:

Pokaż bibliotekę multimediów XCode

Następnie wybierz obraz z biblioteki i przeciągnij i upuść go do swojego kodu

Wybierz obraz z biblioteki

Stworzy obraz dosłowny


Dzięki! Dla innych: na pierwszym zrzucie ekranu ikona LEFTMOST jest naciśnięta {}
xaphod

3
co ciekawe, stworzyło to dla mnie nieprawidłowe literały obrazu podczas korzystania z zasobów PDF, co spowodowało awarię środowiska wykonawczego - w kompilacji GM.
David Ganster,

15
Stwarza to jedno dosłowne dla każdego @1x, @2xi @3xaktywów, a zatem nie skompilować
Zappel

2
Poważnie, jak to ma działać? Czy nie ma sposobu, aby przeciągnąć i upuścić jedną reprezentację wszystkich trzech rozdzielczości? Wygląda to na ogromne przeoczenie Apple.
aBikis,

29

Z korzyścią dla innych, którzy mają starszy kod, który wykorzystuje Swift Image Literals , sam kod i składnia funkcji literału obrazu są nadal prawidłowe i działają doskonale w Xcode 10 z Swift 4.2.

Nie ma potrzeby wycofywania ani refaktoryzacji istniejącego kodu, który wykorzystuje te literały obrazu i nadal można ich używać w następujący sposób:

imageView.image = #imageLiteral(resourceName: imageNameString)

Wyłączono tylko funkcję uzupełniania kodu (lub automatycznego uzupełniania) środowiska Xcode IDE.


AKTUALIZACJA

Różnica w reprezentacji literału obrazu w poprzednich i bieżących wersjach lub Xcode / Swift:

image = #imageLiteral(resourceName: "flower.jpg")

image = #imageLiteral (resourceName: "kwiat.jpg")

Jak pokazuje wyciąg, literały obrazu zostały przedstawione w jednej linii z miniaturami ich rzeczywistego obrazu. Jednak teraz zamiast tego używana jest tylko ogólna ikona. Prawdopodobnie ma to na celu zmniejszenie obciążenia środowiska IDE poprzez wyeliminowanie kosztów ogólnych związanych z obsługą i wyświetlaniem miniatur w linii.


2
Czy wiemy, dlaczego Apple to usunęło? Czy literały obrazu będą w przyszłości amortyzowane?
Bryan Hill

@BryanHill Nie podano żadnego wyjaśnienia, o którym wiem. Ale zaktualizowałem moją odpowiedź powyżej, podając najlepsze przypuszczenie.
iSofia

Zaznaczyłem to, gdy zamiast obrazu pojawi się ogólna ikona. Twoja aplikacja ulegnie awarii w tym miejscu.
Badal Shah

W jakiś sposób nagle pojawiły się miniatury wyświetlane w tekście, gdy wybrałem wiersz zawierający je (Xcode 10.0 (10A255)).
fl034

2
Myślę, że to tylko błąd
Reid Ellis,

18

WSKAZÓWKA: Aby naprawić trzy rozdzielczości po dodaniu dosłownego obrazu w kodzie.
1. Usuń inny, zachowaj tylko jeden obraz
2. Skomentuj swój kod linii za pomocą dosłownego obrazu, a następnie pojawi się dosłowny obraz w kodzie, taki jak: #imageLiteral(resourceName: "image@2x.png"
3. w resourceNamewartości, usuń @2xi rozszerzenie pliku, np. .pngZachowaj tylko nazwę obrazu: #imageLiteral(resourceName: "image")
4. Odkomentuj! Obraz zostanie pokazany w kodzie.


4
Dzięki. Co za szalejący ogień w śmietniku Literały XCode są w mo
xaphod

1
(Po prostu podobało mi się raging dumpster fire;)).
Chris Prince,

Dzięki, jest to dobry sposób na faktyczne użycie image name(ale nadal zachowuje to jako literał obrazu) zamiast wybierania z selektora.
angtlin

8

W Xcode 11 biblioteka multimediów znajduje się teraz w widoku> Pokaż bibliotekę (SHIFT + CMD + L).


7

Jeśli ktoś używa Xcode 11 , możesz znaleźć wszystkie multimedia, korzystając z poniższej opcji:

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj


Ale to wstawia tylko ścieżkę do obrazu?
Ixx

Tak, jest to tylko ścieżka do wstawiania, ale w ten sposób można sprawdzić wszystkie literały obrazu
guru

2
  • użycie UIImage (imageLiteralResourceName: 'imageName') nie zwróci wartości opcjonalnej i działa dobrze

0

Używam Xcode 10 beta 4 i mam ten sam problem! Rozwiązano przy użyciu starego sposobu przekazywania obrazu

PizzaModel(
            nome: "Marinara",
            ingredienti: "Pomodoro, Aglio",
            calorie: "729",
            img: UIImage(named: "marinara")!
)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.