如何使用户定义的运行时属性在xcode 10.2.1和ios 12.2中起作用

时间:2019-04-30 13:51:56

标签: swift swift5 xcode10.2

我将代码转换为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=”。

还有什么替代方案,我仍然可以在情节提要中使用该类的用户定义的运行时属性?谢谢。

2 个答案:

答案 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用户界面;您可以设置属性直接在“属性”检查器中,而不必弄乱“用户定义的运行时属性”表。)