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

Paweł Cichoński
źródło
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

Daniel Arantes Loverde
źródło
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.

Ron Gahlot
źródło
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

andrey.krukovskiy
źródło
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.

iSofia
źródło
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: "[email protected]"
3. w resourceNamewartości, usuń @2xi rozszerzenie pliku, np. .pngZachowaj tylko nazwę obrazu: #imageLiteral(resourceName: "image")
4. Odkomentuj! Obraz zostanie pokazany w kodzie.

Wesley Gomes
źródło
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).

samwize
źródło
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

guru
źródło
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
Francis Ken
źródło
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")!
)
Gianlo
źródło