我将代码转换为Swift 5,因为Xcode 10.2.1将不再支持Swift 3。
我在情节提要中有一个用户定义的运行时变量。它在Swift 3中可用,但在Swift 5中没有。
关键路径|类型值
类型字串| A
class Mains: UITableViewController, XMLParserDelegate {
...
var type = String()
...
func loadBuses(){
let url:String="http://example.com/Main.php?type="+type
let urlToSend: URL = URL(string: url)!
...
}
...
}
在Swift 3中,该函数已运行,并且URL返回“ http://example.com/Main.php?type=A”。 但是在Swift 5中,URL的实际输出仅返回“ http://example.com/Main.php?type=”。
还有什么替代方案,我仍然可以在情节提要中使用该类的用户定义的运行时属性?谢谢。
答案 0 :(得分:0)
您需要执行以下操作:
@IBInspectable var type = String()
答案 1 :(得分:0)
您应该在控制台中看到一条错误消息:
此类不适用于键类型的键值编码
此错误是问题的线索。用户定义的运行时属性通过Objective-C / Cocoa功能(键值编码)工作。这要求Objective-C能够查看您要设置的属性。在现代Swift中,您可以通过使用@objc
属性标记自定义属性来使Objective-C可以访问它:
@objc var type = String()
您的代码将像以前一样工作。
(但是drewster的建议也很好。@IBInspectable
使用相同的机制作为用户定义的运行时属性。如果将某些内容标记为@IBInspectable
,则会将其标记为{{1 }}在后台自动运行(@objc
也是如此, 也使用这种机制。)Inspectable属性为您提供了一个更好的IB用户界面;您可以设置属性直接在“属性”检查器中,而不必弄乱“用户定义的运行时属性”表。)