如何使用户定义的运行时属性在 xcode 10.2.1 和 ios 12.2 中起作用
How to make user defined runtime attribute functioned in xcode 10.2.1 and ios 12.2
我正在将代码转换为 Swift 5,因为 Xcode 10.2.1 将不再支持 Swift 3.
我在故事板中有一个用户定义的运行时变量。它在 Swift 3 中有效,但在 Swift 5 中无效。
Key Path | Type | Value
type | String | 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 return “http://example.com/Main.php?type=A”。
但是在 Swift 5 中, url 的实际输出只是 return "http://example.com/Main.php?type=".
还有什么替代方案我仍然可以在 class 的故事板中使用用户定义的运行时属性?谢谢。
您需要执行以下操作:
@IBInspectable var type = String()
您应该会在控制台中看到一条错误消息:
this class is not key value coding-compliant for the key type
这个错误是问题的线索。用户定义的运行时属性通过 Objective-C / Cocoa 功能、键值编码来工作。这要求 Objective-C 能够 看到 您尝试设置的 属性。在现代 Swift 中,您可以通过使用 @objc
属性标记自定义 属性 以供 Objective-C 访问:
@objc var type = String()
您的代码将像以前一样工作。
(但是 drewster 的建议也很好。@IBInspectable
使用 与用户定义的运行时属性相同的机制。如果您将某些内容标记为 @IBInspectable
在引擎盖下自动标记为 @objc
(@IBOutlet
也是如此, 也 使用此机制)。并且 Inspectable 属性 在 IB 中为您提供了更好的用户界面;您可以直接在属性检查器中设置 属性,而不必弄乱用户定义的运行时属性 table。)
我正在将代码转换为 Swift 5,因为 Xcode 10.2.1 将不再支持 Swift 3.
我在故事板中有一个用户定义的运行时变量。它在 Swift 3 中有效,但在 Swift 5 中无效。
Key Path | Type | Value
type | String | 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 return “http://example.com/Main.php?type=A”。 但是在 Swift 5 中, url 的实际输出只是 return "http://example.com/Main.php?type=".
还有什么替代方案我仍然可以在 class 的故事板中使用用户定义的运行时属性?谢谢。
您需要执行以下操作:
@IBInspectable var type = String()
您应该会在控制台中看到一条错误消息:
this class is not key value coding-compliant for the key type
这个错误是问题的线索。用户定义的运行时属性通过 Objective-C / Cocoa 功能、键值编码来工作。这要求 Objective-C 能够 看到 您尝试设置的 属性。在现代 Swift 中,您可以通过使用 @objc
属性标记自定义 属性 以供 Objective-C 访问:
@objc var type = String()
您的代码将像以前一样工作。
(但是 drewster 的建议也很好。@IBInspectable
使用 与用户定义的运行时属性相同的机制。如果您将某些内容标记为 @IBInspectable
在引擎盖下自动标记为 @objc
(@IBOutlet
也是如此, 也 使用此机制)。并且 Inspectable 属性 在 IB 中为您提供了更好的用户界面;您可以直接在属性检查器中设置 属性,而不必弄乱用户定义的运行时属性 table。)