Xcode 10-图像文字不再可用


92

Xcode 10发行说明:“已在Xcode 10中删除了Swift图像文字的代码完成功能”

因此,我无法在代码中添加图像(并运行旧项目)不是一个bug。我们如何从现在开始在代码中添加图像,因为仅键入UIImageView(image:将不接受任何png或jpeg。

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

    return image
}()

系统:macOS Mojave
Xcode:Xcode 10 Beta 4


UIImage(named: "myImage")就像您
过去的

值得注意的是:仅删除了图像文字的代码完成。该图像文字本身继续做工精细上的XCode 10雨燕4.2。
iSofia

@isofia不,他们没有,因为你做不到。
马特

3
这很不幸,图像字面量的完成是一个不错的功能
Eric Armstrong

Answers:


118

Xcode 10和Swift 4.2中,只有Xcode IDE的代码完成功能(或自动完成)因旧方法而停止使用。这是新方法:

只需键入image literal,它将完成并带有默认图标。

在此处输入图片说明

 

双击该图标,它将打开它右侧的媒体库。

在此处输入图片说明

 

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

在此处输入图片说明


61
这样无法通过名称找到图像。然后我的设计师将所有资产都给了我,即透明白色png,因此所有缩略图都以随机顺序呈现为纯白色...无法选择该图像。-_-
心教堂

2
嗨,Coeur,您好,请告诉您的设计将所有图像设置为灰色,然后将资产更改为模板,然后再在Storyboard或代码上进行着色:)
Daniel Arantes Loverde

这是正常的,双击打开列表
Daniel Arantes Loverde

@Cœur这不是不可能,但很难,如果您执行项目,#imageLiteral只是标记化字符串的图形表示,这使得它可以用find(在您当前文件夹中的#imageLiteral)进行搜索:)
Dominik Bucher

@DominikBucher已经有两年了,现在我正在使用Xcode 12,因此要使用以下流程 X ++ 右上角的+ + L+按钮。
心教堂

98

找到快捷方式以打开“媒体库”选项卡:

+ +M

目前,官方文档尚未涵盖Xcode 10 beta上的一些用例,因此我无法找到将媒体部分移至旧位置的方法。


7
太糟糕了,我无法输入Enter来插入项目。我必须使用鼠标光标将该项目拖动到代码中-.-
fl034

4
媒体库没有插入正确的图像文字,但是...它将3种图像文字放入3种不同的图像分辨率中。
约书亚·沙利文

如果删除前两个,它仍然可以使用。苹果,太乱了。
CIFilter

51

您可以在Xcode中使用媒体库将图像文字添加到代码中:

显示XCode媒体库

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

从库中选择图像

它将创建图像文字


谢谢!对于其他用户:在第一个屏幕截图中,按下了LEFTMOST图标{}
xaphod

3
有趣的是,这在使用pdf资源时为我创建了无效的图像文字,从而导致运行时崩溃-在GM构建中。
大卫·甘斯特

15
这对于每一个创建文字@1x@2x以及@3x资产,因此不会编译
Zappel

2
认真地说,这应该如何工作?是否无法拖放所有三种分辨率的一种表示形式?这似乎是苹果公司的巨大监督。
aBikis

28

为了使其他拥有使用Swift Image Literals的遗留代码的用户受益,图像文字函数本身的代码和语法仍然有效,并且在带有Swift 4.2的Xcode 10中可以很好地工作。

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

imageView.image = #imageLiteral(resourceName: imageNameString)

仅Xcode IDE的代码完成功能(或自动完成)已终止。


更新

以前和当前版本或Xcode / Swift中的图像文字表示形式的差异:

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

图片= #imageLiteral(资源名称:“ flower.jpg”)

如摘录所示,图像文字是用实际图像的缩略图在线表示的。但是,现在仅在其位置使用通用图标。据推测,这将通过消除处理和显示嵌入式缩略图的开销来减轻IDE的负担。


2
我们知道为什么苹果要这么做吗?图像文字将来是否会贬值?
布莱恩·希尔

@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
谢谢。Mo
xaphod

1
(我只是喜欢raging dumpster fire;))。
克里斯·普林斯

谢谢,这是一种实际能够使用image name(但仍将其保留为图像文字)而不用从选择器中进行选择的好方法。
angtlin,

7

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


6

如果有人使用Xcode 11,则可以使用以下选项查找所有媒体:

在此处输入图片说明

在此处输入图片说明


但这仅插入图像的路径吗?
Ixx

是的,它只有插入路径,但这是您可以检查所有图像文字的方式
大师

2
  • 使用UIImage(imageLiteralResourceName:'imageName')不会返回可选值,并且可以正常工作

0

我正在使用Xcode 10 beta 4,但我遇到了同样的问题!解决了使用旧方法传递图像的问题

PizzaModel(
            nome: "Marinara",
            ingredienti: "Pomodoro, Aglio",
            calorie: "729",
            img: UIImage(named: "marinara")!
)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.