如何使用户定义的运行时属性在 xcode 10.2.1 和 ios 12.2 中起作用
Posted
技术标签:
【中文标题】如何使用户定义的运行时属性在 xcode 10.2.1 和 ios 12.2 中起作用【英文标题】:How to make user defined runtime attribute functioned in xcode 10.2.1 and ios 12.2 【发布时间】:2019-04-30 13:51:55 【问题描述】:我正在将代码转换为 Swift 5,因为 Xcode 10.2.1 将不再支持 Swift 3。
我在情节提要中有一个用户定义的运行时变量。它在 Swift 3 中有效,但在 Swift 5 中无效。
关键路径 |类型 |价值 类型 |字符串 |一个
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=”。
在任何替代方案中,我仍然可以在故事板中为该类使用用户定义的运行时属性?谢谢。
【问题讨论】:
尝试将type
声明为@objc
。
【参考方案1】:
您应该会在控制台中看到一条错误消息:
这个类不符合键类型的键值编码
此错误是问题的线索。用户定义的运行时属性通过 Objective-C / Cocoa 特性、键值编码工作。这要求 Objective-C 能够看到您尝试设置的属性。在现代 Swift 中,您可以通过使用 @objc
属性标记自定义属性来使 Objective-C 可以访问它:
@objc var type = String()
您的代码将像以前一样工作。
(但drawster的建议也不错。@IBInspectable
使用与用户定义的运行时属性相同的机制。如果您将某些内容标记为@IBInspectable
,它会在引擎盖下自动标记为@objc
(@IBOutlet
也是如此,也使用了这种机制)。Inspectable 属性在 IB 中为您提供了更好的用户界面;您可以直接在属性检查器中设置您的属性,而不是不必弄乱用户定义的运行时属性表。)
【讨论】:
【参考方案2】:您需要执行以下操作:
@IBInspectable var type = String()
【讨论】:
以上是关于如何使用户定义的运行时属性在 xcode 10.2.1 和 ios 12.2 中起作用的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 10.2 无法在 iOS < 10 的模拟器上运行应用程序