我做了这个功能:
func GetCurrentIndex (Table: Int) -> String {
类索引。
现在我想使用:
从类GetTable调用该函数var index : Index!
let I = index.GetCurrentIndex(0)
它的作用是回归nill在意外区域返回并且只是崩溃。
答案 0 :(得分:2)
由于你的函数不是类函数而且Index
不是类实例,你应该:
将索引定义为
var index = Index()
创建索引的类实例
或
class func GetCurrentIndex (Table: Int) -> String {
这将使该函数在类上运行,而不是在类的实例上运行。
答案 1 :(得分:0)
为了做到这一点,你应该公开你的类和函数public以允许从另一个类进行访问。
public class Index {
public func getCurrentIndex () {
//code here
}
}
然后从你想要调用它的类中,初始化索引如下:
var index : Index = Index()
然后你可以打电话:
index.getCurrentIndex()
希望这有帮助。
答案 2 :(得分:0)
您的代码正确编译的事实告诉我们您的方法已正确实现 1 。如果您的instance
变量属于编译器不确定的类型,并且GetCurrentIndex
方法是实例方法,那么您的代码将无法编译。
正在发生的事情是完全无法理解选项和零值。
首先,我们不应该使用隐式解包的选项(您在键入Index!
时所做的事情)。这些允许您编写不安全的代码,并且不允许编译器强制执行nil-checking。
如果我们将index
变量声明为常规可选(Index?
),编译器将强制我们使用一些语法来防止真正的nil可能性:
var index: Index?
let i = index?.getCurrentIndex(0)
请参阅?.
语法?这叫做可选链接。该语法的含义是如果 index
为非零,我们将在其上调用getCurrentIndex(0)
并返回结果。否则,我们只需返回nil
。我们可以找到(并且您可以通过按住Option并点击i
来查看),这使得i
的类型也是可选的(String?
)。编译器可以推断出这一点,因为我们可以选择性地链接index
并且可以知道nil
是有效的可能性。此外,编译器知道被调用的方法的返回类型为String
。
现在i
将是String?
类型,我们将执行类似的可选绑定操作以获取其值。
或者,如果我们不想要选项,那么我们就不要做选项,并像其他答案所建议的那样做,并简单地实例化我们的Index
对象:
var index = Index()
let i = index.getCurrentIndex(0)
在一天结束时,重点不是使用隐式展开的选项(Index!
),因为它们只会导致崩溃。要么是非可选的,要么知道它永远不会是nil,或者使它们完全是可选的,并且需要显式的解包代码,编译器将帮助你强制执行。
1:问题不在于方法签名。方法体很可能存在问题,但这不是这个问题的一部分。