Xcode 10-더 이상 사용할 수없는 이미지 리터럴


95

Xcode 10 릴리스 노트 : "Swift 이미지 리터럴에 대한 코드 완성이 Xcode 10에서 제거되었습니다."

따라서 코드에 이미지를 추가하고 이전 프로젝트를 실행할 수없는 것은 버그가 아닙니다. 입력만으로 UIImageView(image:png 또는 jpeg를 허용하지 않으므로 지금부터 코드에 이미지를 추가하는 방법은 무엇입니까 ?

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

    return image
}()

시스템 : macOS Mojave
Xcode : Xcode 10 Beta 4


UIImage(named: "myImage")너희 올드 시대에 같은 (?)
— Alladinian

참고 : 이미지 리터럴에 대한 코드 완성 만 삭제되었습니다 . 이미지 리터럴 자체가 잘 작동을 계속 스위프트 4.2 엑스 코드 (10)에.
— iSofia

@isofia 아니 그들은 당신이 하나를 만들 수 없기 때문에하지 않습니다.
— 맷

3
이 이미지 문자 완성 좋은 기능이고, 불행한 일이다
— 에릭 암스트롱

답변:


124

에서 엑스 코드 (10)와 스위프트 4.2 만 코드 완성 기능 (또는 자동 완성) Xcode의 IDE의는 기존의 방법을 중단되었습니다. 새로운 방법은 다음과 같습니다.

입력 만하면 image literal기본 아이콘으로 완료됩니다.

여기에 이미지 설명 입력

 

이 아이콘을 두 번 클릭하면 오른쪽에 미디어 라이브러리가 열립니다.

여기에 이미지 설명 입력

 

이미지를 선택하기 만하면 이전처럼 작동합니다!

여기에 이미지 설명 입력


63
이런 식으로 이름으로 이미지를 찾는 것은 불가능합니다. 그리고 내 디자이너는 모든 자산을 투명에 흰색 png로 제공했기 때문에 모든 섬네일은 임의의 순서로 순수한 흰색으로 렌더링됩니다. -_-
— Cœur

2
안녕하세요 쾨르는 다음 템플릿에 자산을 변경, 회색의 모든 이미지를 넣어 설계를 알려주십시오, 그리고 당신은 : 스토리 보드 또는 코드에 착색 할 수
— 다니엘 Arantes Loverde

여기는 정상입니다. 목록을 두 번 클릭하여 엽니 다.
— Daniel Arantes Loverde

@ Cœur 불가능하지는 않지만 어렵습니다. 프로젝트를 살펴보면 #imageLiteral은 토큰 화 된 문자열의 그래픽 표현 일 뿐이므로 find (현재 폴더의 #imageLiteral)로 검색 할 수 있습니다. :)
— Dominik Bucher

그것은 2 년 지났는데 흐름이 사용하는 것입니다, 그래서 지금은, 엑스 코드 (12) 사용하고 @DominikBucher ⇧+ ⌘+ L나 +의 엑스 코드의 오른쪽 상단에있는 버튼을 누릅니다.
— Cœur

98

미디어 라이브러리 탭을 여는 바로 가기를 찾았습니다.

⇧+ ⌘+M

이 시점에서 공식 문서는 Xcode 10 베타의 일부 사용 사례를 다루지 않으므로 미디어 부분을 이전 위치로 이동하는 방법을 찾을 수 없습니다.


7
항목을 삽입하기 위해 입력 할 수 없습니다. 항목을 코드로 드래그하려면 마우스 커서를 사용해야합니다. -.-
— fl034

4
그러나 미디어 라이브러리는 적절한 이미지 리터럴을 삽입하지 않습니다. 3 개의 다른 이미지 해상도를 참조하는 3 개의 이미지 리터럴을 넣습니다.
— Joshua Sullivan

처음 두 개를 삭제해도 여전히 작동합니다. 너무 지저분 해, 애플.
— CIFilter

52

Xcode에서 미디어 라이브러리를 사용하여 코드에 이미지 리터럴을 추가 할 수 있습니다.

XCode 미디어 라이브러리 표시

그런 다음 라이브러리에서 이미지를 선택하고 코드로 끌어다 놓습니다.

라이브러리에서 이미지 선택

이미지 리터럴을 생성합니다.


감사! 기타 : 첫 번째 스크린 샷에서 LEFTMOST 아이콘이 눌려
— 짐

3
흥미롭게도 이것은 pdf 리소스를 사용할 때 유효하지 않은 이미지 리터럴을 생성하여 GM 빌드에서 런타임 충돌을 일으켰습니다.
— David Ganster

15
이것은 각각 하나 개의 문자를 생성 @1x, @2x및 @3x컴파일되지 않습니다 따라서 자산
— Zappel

2
이게 어떻게 작동해야하나요? 세 가지 해상도 모두를 하나의 표현으로 끌어서 놓을 수있는 방법이 없습니까? 이것은 Apple의 거대한 감독처럼 보입니다.
— aBikis

28

Swift Image Literal을 지원하는 레거시 코드를 사용하는 다른 사용자를 위해 이미지 리터럴 함수 자체의 코드와 구문 은 여전히 ​​유효하며 Swift 4.2 가 설치된 Xcode 10에서 완벽하게 작동합니다.

이러한 이미지 리터럴을 사용하는 기존 코드를 롤백하거나 리팩터링 할 필요가 없으며 다음과 같이 계속 사용할 수 있습니다.

imageView.image = #imageLiteral(resourceName: imageNameString)

Xcode IDE의 코드 완성 기능 (또는 자동 완성) 만 중단되었습니다.


최신 정보

이전 및 현재 버전 또는 Xcode / Swift에서 이미지 리터럴 표현의 차이 :

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

이미지 = #imageLiteral (resourceName : "flower.jpg")

추출에서 알 수 있듯이 이미지 리터럴은 실제 이미지의 축소판과 함께 인라인으로 표시되었습니다. 그러나 이제는 일반 아이콘 만 대신 사용됩니다. 아마도 이것은 인라인 썸네일을 처리하고 표시하는 오버 헤드를 제거하여 IDE의 부담을 줄이는 방향으로 진행됩니다.


2
애플이 왜 이것을 꺼 냈는지 알고 있습니까? 이미지 리터럴은 향후 감가 상각됩니까?
— Bryan Hill

@BryanHill 내가 아는 설명이 없습니다. 그러나 나는 위의 내 대답을 최선의 추측으로 업데이트했습니다.
— iSofia

이미지 대신 일반 아이콘이 표시 될 때 표시했습니다. 그러면 응용 프로그램이 그 위치에서 충돌합니다.
— Badal Shah

썸네일이 포함 된 줄 (Xcode 10.0 (10A255))을 선택했을 때 갑자기 축소판이 인라인으로 표시되었습니다.
— fl034

2
난 그냥 버그라고 생각
— 리드 엘리스에게

18

팁 : 코드에 리터럴 이미지를 추가 한 후 세 가지 해상도를 수정하려면.
다른 제거 1. 하나의 이미지 만 유지
2. 주석 문자 그대로의 이미지와 라인 코드를 다음과 같이 코드에서 문자 그대로의 이미지를 나타납니다 : #imageLiteral(resourceName: "image@2x.png"
3. resourceName값을 제거 @2x하고 파일 확장자와 같은 .png, 전용 이미지 이름 유지 : #imageLiteral(resourceName: "image")
4의 주석을! 이미지가 코드로 표시됩니다.


4
감사. 성난 쓰레기통 화재 XCode 이미지 리터럴이 mo
— xaphod

1
(나는 그냥 raging dumpster fire;)).
— 크리스 왕자

감사합니다. 이것은 image name선택기에서 선택하는 대신 실제로 사용할 수있는 좋은 방법입니다 (하지만 여전히 이미지 리터럴로 유지).
— angtlin

8

Xcode 11에서 미디어 라이브러리는 이제보기> 라이브러리 표시 (SHIFT + CMD + L)에 있습니다.


7

Xcode 11 을 사용하는 사람이라면 아래 옵션을 사용하여 모든 미디어를 찾을 수 있습니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력


그러나 이것은 이미지에 대한 경로 만 삽입합니까?
— Ixx

예, 삽입 전용 경로이지만 이것이 모든 이미지 리터럴을 확인할 수있는 방법입니다
— 전문가

2
  • UIImage (imageLiteralResourceName : 'imageName')를 사용하면 선택 사항이 반환되지 않고 제대로 작동합니다.

0

나는 Xcode 10 베타 4를 사용하고 있으며 같은 문제가 있습니다! 이미지를 전달하는 이전 방법을 사용하여 해결되었습니다.

PizzaModel(
            nome: "Marinara",
            ingredienti: "Pomodoro, Aglio",
            calorie: "729",
            img: UIImage(named: "marinara")!
)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.