在同一个项目中调用其他类/ swiftfile的函数

时间:2015-10-13 12:42:02

标签: swift function

我做了这个功能:

func GetCurrentIndex (Table: Int) -> String {

类索引。

现在我想使用:

从类GetTable调用该函数
var index : Index!

let I = index.GetCurrentIndex(0)

它的作用是回归nill在意外区域返回并且只是崩溃。

3 个答案:

答案 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:问题不在于方法签名。方法体很可能存在问题,但这不是这个问题的一部分。