不同文件中的相同功能代码,但以不同方式调用
在AppDelegate.swift我写道:
func findIndexOfString(str: String, arr: [String]) -> Int?{
for (index, value) in enumerate(arr){
if (value == str){
return index
}
}
return nil
}
我可以这样调用这个函数,没问题:(当然在AppDeleagte类中)
let index = findIndexOfString(name, arr: neighbors)
然后我将WHOLE函数代码移动到另一个文件 - Function.swift(不在类中),我必须像这样调用函数:
let index = findIndexOfString(name, neighbors) // no arr:
为什么呢?也许swift将不在类中的函数视为全局范围C函数?
答案 0 :(得分:0)
当您将WHOLE功能代码移动到另一个文件 - Function.swift(不在类中)时,您可以像let index = findIndexOfString(name, neighbors)
一样调用该函数,因为您在类之外定义它意味着它是全局的功能,你可以在任何地方访问它。
除非您将该函数声明为private,这限制了定义它的文件的可见性,否则您可以在模块中的任何位置使用它(如果声明为internal(默认)),如果声明为public,则也可以从外部模块使用它。
有关功能的更多信息,请参阅Apple Documentation。
<强>更新强>
结构和枚举可以在Swift中定义方法的事实是与C和Objective-C的主要区别。在Objective-C中,类是唯一可以定义方法的类型。在Swift中,您可以选择是定义类,结构还是枚举,并且仍然可以灵活地在您创建的类型上定义方法。
方法的本地和外部参数名称:
Swift中的方法与Objective-C中的方法非常相似。
默认情况下,Swift在方法中为第一个参数名称提供本地参数名称,默认情况下为第二个和后续参数名称提供本地和外部参数名称。此约定与您在编写Objective-C方法时熟悉的典型命名和调用约定相匹配,并且无需限定参数名称即可进行表达式方法调用。
考虑这个Counter
类,它定义了incrementBy(_:)
方法的更复杂形式:
class Counter {
var count: Int = 0
func incrementBy(amount: Int, numberOfTimes: Int) {
count += amount * numberOfTimes
}
}
此incrementBy(_:numberOfTimes:)
方法有两个参数 - amount和numberOfTimes
。默认情况下,Swift仅将金额视为本地名称,但将numberOfTimes
视为本地名称和外部名称。您可以按如下方式调用该方法:
let counter = Counter()
counter.incrementBy(5, numberOfTimes: 3)
// counter value is now 15
您不需要为第一个参数值定义外部参数名称,因为它的用途是从函数名称incrementBy(_:numberOfTimes :)中清除。但是,第二个参数由外部参数名限定,以便在调用方法时明确其目的。
上述行为意味着Swift中的方法定义使用与Objective-C相同的语法风格编写,并以自然,富有表现力的方式调用。
有关详细信息,请参阅此Apple Document。
你可以查看THIS视频,然后你会在0:55得到答案。