刚刚从swift 3迁移到swift5。如何解决以下错误?

时间:2019-04-10 03:11:29

标签: swift

只需将Swift 3迁移到Swift 5并获得所有这些错误。在执行此操作之前,我没有任何错误。

var imageData = UIImageJPEGRepresentation(imgTemp, 1)  

错误:'UIImageJPEGRepresentation'已由实例方法'UIImage.jpegData(compressionQuality :)'代替

tableView.SeparatorStyleCell.none

错误:类型为“ UITableView?”的值?没有成员“ SeparatorStyleCell”

tableView.UITableView.AutomaticDimension

错误:类型为“ UITableView?”的值?没有成员“ UITableView”

self.tableView.UIEdgeInset  = insetsMake(8, 0, 15, 0);

错误:使用未解决的标识符“ insetsMake”

attributedString.addAttributes(boldFontAttribute, range: datetime.range(of: "Read"))

错误:使用未解决的标识符“ boldFontAttribute”

2 个答案:

答案 0 :(得分:0)

您好@Brett Taylor

您遇到的错误是混合的编译器,告诉您所使用的语法对于此版本的Swift而言已过时,例如:

  

'UIImageJPEGRepresentation'已被实例方法'UIImage.jpegData(compressionQuality :)'代替

和Swift迁移器对您的代码做一些有趣的事情,例如:

self.tableView.UIEdgeInset  = insetsMake(8, 0, 15, 0);

您是否已将该代码置于版本控制之下?理想情况下是Git回购吗?

如果是这样,您可以还原所有这些更改并重新开始。或仅在不使用迁移器的情况下将Swift的版本设置为5,并解决每个编译器错误。

最好的办法是一次解决一个错误,并且每次解决问题时都可以提交一次承诺,因此,如果下一步不进行锻炼,则可以从那里重新开始,而不必放松所有精力进度。

对于混乱的代码,也许您可​​以先了解一下代码在做什么,然后尝试从头开始重写它。

在上面的示例中,我猜这是代码,因此设置表视图的内容插入或其他插入属性。您可以这样重写它:

tableView.contentInset = UIEdgeInsets(top: 8, left: 0, bottom: 15, right: 0)

请注意,我删除了self.,通常没有必要,除非您位于闭包中并且需要使其明确。

答案 1 :(得分:0)

看起来有些孤立的Objective-C在您的项目中得以幸存。

tableView.SeparatorStyleCell.none

应该是

tableView.separatorStyle = .none

下一步:

tableView.UITableView.AutomaticDimension

应该是

tableView.rowHeight = UITableView.automaticDimension

至:

var imageData = UIImageJPEGRepresentation(imgTemp, 1)  

旧的C函数确实移动了正在使用的类。 (我喜欢Apple清理旧界面的方式)

var imageData = imgTemp.jpegData(compressionQuality: 1)

至:

self.tableView.UIEdgeInset  = insetsMake(8, 0, 15, 0);

mokagios的答案是正确的。再次清理苹果界面。 UIEdgeInsets现在是一种类型,并且具有init函数。

最后:

attributedString.addAttributes(boldFontAttribute, range: datetime.range(of: "Read"))

我猜您的boldFontAttribute是一个包含相应键和字体的Dict。与下划线等其他属性不同,粗体不是属性,而是字体。要使范围变为粗体,您需要为该范围分配其他字体。 在Swift中会是

let boldFontAttribute = { NSAttributedString.Key.font : YourBoldFont }