Xcode 10 - 图像字面量不再可用

109
所以我无法通过键入 UIImageView(image: 添加图片(并运行旧项目)不是bug。那么现在我们如何在代码中添加图片,因为它不会接受任何png或jpeg。
let cellImage: UIImageView = {
    let image = UIImageView(image: ???))

    return image
}()

操作系统:macOS Mojave
开发工具:Xcode 10 Beta 4


2
值得注意的是:仅已删除图像字面量的代码自动补全功能。在使用Swift 4.2的XCode 10中,图像字面量本身仍然可以正常工作。 - iSofia
2
@matt:imageView.image = #imageLiteral(resourceName: imageNameString) - 自动补全无法辅助,图片也没有显示,但这是完全有效的,可以完美地工作。 - iSofia
1
@matt:没错,尽管 OP 的标题“图像文字面量不再可用”是不准确的。第一条评论和提供的答案也表明了同样的事情,建议回滚到 UIImage(named:) 方法,就像你所做的那样。总之,在迁移到 Swift 4.2 时,在这方面不需要进行任何代码重构。 - iSofia
3
很不幸,图像字面量补全是一个不错的功能。 - Eric Armstrong
2
可能是Image suggestions are not working Xcode 10的重复问题。 - Jay Patel
显示剩余4条评论
12个回答

139
在Xcode 10和Swift 4.2中,Xcode IDE的代码补全功能(或自动完成)已经停用了旧的方式。这里是新的方式:只需键入“image literal”,它将以默认图标完成。

enter image description here

 

双击此图标,它将在右侧打开媒体库。

enter image description here

 

只需选择您的图像,它就像以前一样工作!

enter image description here


72
用这种方式按名称查找图像是不可能的。而我的设计师把所有素材都给我了,格式是白色背景透明的PNG文件,所以所有缩略图都随机呈现为纯白色……选择哪张图片就像是不可能完成的任务。-_- - Cœur
2
嗨Coeur,请告诉你的设计师将所有图像放在灰色背景上,然后将你的资源更改为模板,然后你就可以在Storyboard或代码中对其进行着色 :) - Daniel Arantes Loverde
这里正常,双击打开列表。 - Daniel Arantes Loverde
@Cœur,这并非不可能,但很困难。如果你进入了项目,#imageLiteral 就是被标记字符串的图形表示,这使得它可以通过查找(在当前文件夹中搜索 #imageLiteral)进行搜索 :) - Dominik Bucher
1
@DominikBucher已经过去两年了,现在我正在使用Xcode 12,因此流程是使用 + + L或位于Xcode右上角的 + 按钮。 - Cœur

99

发现打开媒体库选项卡的快捷方式:

++M

目前,官方文档对于 Xcode 10 beta 的某些用例没有涵盖,因此我无法找到将媒体部分移动到旧位置的方法。


7
很遗憾我无法使用回车键插入项目,我必须使用鼠标光标将项目拖到代码中。-.- - heyfrank
4
媒体库没有插入适当的图像字面量,但它会插入三个引用三种不同图像分辨率的图像字面量。 - Joshua Sullivan
如果你删除前两个,它仍然可以工作。太混乱了,苹果。 - CIFilter

55

您可以在Xcode的媒体库中添加图像文字来编写代码:

显示XCode媒体库

然后从库中选择图像并将其拖放到您的代码中

从库中选择图像

它会创建图像文字


谢谢!对于其他人:在第一张截图中,按下最左边的图标 { }。 - xaphod
3
有趣的是,当我使用PDF资源时,这为我创建了无效的图像文字,导致GM版本崩溃。 - David Ganster
16
这会为每个 @1x@2x@3x 资产创建一个字面量,因此不会编译。 - Zappel
2
这怎么可能正常工作呢?没有一种方法可以拖放三个分辨率的一个表示吗?这似乎是苹果犯下的一个巨大疏忽。 - aBikis

42

为了让其他使用遗留代码的人受益,Swift图像字面量函数的代码和语法在Xcode 10与Swift4.2中仍然有效并可以完美运行。

无需回滚或重构使用这些图像字面量的现有代码,它们仍可按以下方式使用:

imageView.image = #imageLiteral(resourceName: imageNameString)

Xcode IDE的代码补全功能(或自动补全)已被停止使用。


更新

Xcode/Swift之前和当前版本中图像文字的表示方式不同:

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

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

正如这段摘录所示,图像字面量原来是与它们实际图像的缩略图一起显示的。然而,现在只使用了一个通用图标来代替。据推测,这是为了减轻集成开发环境的负担,通过消除处理和显示内联缩略图的开销实现。


2
我们知道为什么苹果把它拿掉了吗?图像字面量将来会被弃用吗? - Bryan Hill
@BryanHill 据我所知,没有给出任何解释。但是我已经更新了我的答案,并提供了最佳猜测。 - iSofia
我成功地让预览图像显示出来了,方法是双击山形图标,选择不同的图像,然后按下cmd+z。然后一个文件中的所有预览都出现了。 - B Roy Dawson
3
我认为这只是一个漏洞。 - Reid Ellis
@BryanHill 一些开发者向苹果抱怨代码补全中的图像文字。但是可以通过使用Xcode的“编辑器->创建代码片段...”来重新添加代码补全功能。 - Marcy
显示剩余2条评论

26

TIP: 在添加图像代码后解决三个分辨率问题。
1. 删除其他图像,只保留一个图像。
2. 用文字注释您的行代码并添加文字图片,然后在代码中将出现文字图片,例如:#imageLiteral(resourceName="image@2x.png"
3. 在resourceName值中删除@2x和文件扩展名,如.png,只保留图像名称:#imageLiteral(resourceName="image")
4. 取消注释! 图像将显示在代码中。


6
谢谢。XCode图像文字在目前真是一场燃烧的垃圾场火灾。 - xaphod
1
(我只是喜欢“燃烧的垃圾箱火” ;) ) - Chris Prince
谢谢,这是一个很好的方法,实际上可以使用图像名称(但仍将其保留为图像文字),而不必从选择器中选择。 - angtlin

10

如果您使用的是 Xcode 11,您可以使用以下选项查找所有媒体:

输入图像描述

输入图像描述


但是这只插入了图像的路径? - User
是的,它只是插入路径,但这是您可以检查所有图像文字的方法。 - guru

10

在Xcode 11中,媒体库现在位于视图 > 显示库 (SHIFT+CMD+L)。


7

使用

UIImage(imageLiteralResourceName: 'imageName')

不会返回可选值,而且运行良好。


2

只需使用#imageLiteral(,它就可以工作。


1
只需键入 command+shift+L,您就会得到添加图像选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接