考虑下一个A和B接口:
interface A {f(): number}
interface B {f: () => number}
我已尝试过下一步:
var a: A = {f: function() {return 1}}
var a: A = {f: () => 1}
var b: B = {f: function() {return 1}}
var b: B = {f: () => 1}
看起来一样。
答案 0 :(得分:2)
他们是一样的。它们只是两种不同的符号。您的接口说必须有一个属性let fileUrl = NSURL(fileURLWithPath: (posts.value(forKey: "image_path") as! [String])[indexPath.row])
print(fileUrl as Any) // here i can get path
if FileManager.default.fileExists(atPath: (fileUrl)// nil value {
let url = NSURL(string: (posts.value(forKey: "image_path") as! [String])[indexPath.row]) // Here url found nil
let data = NSData(contentsOf: url! as URL)
cell.LocationImage?.image = UIImage(data: data! as Data)
}
,这是一个没有参数返回数字的函数。
f
和{f: function() {return 1}}
是实现此接口的两种方法。唯一的区别是第二个使用arrow function。这主要是合成糖,但使用{f: () => 1}
关键字略有不同。
答案 1 :(得分:1)
此:
interface A { f(): number }
是用于声明方法的符号,并且:
interface B { f: () => number }
是如何声明函数类型的属性。
虽然在界面上没有真正的区别,但在课堂上更有意义:
class MyClass {
fn1() {
return 0;
}
fn2 = () => {
return 0;
}
fn3 = function () {
return 0;
}
}
编译为:
var MyClass = (function () {
function MyClass() {
this.fn2 = function () {
return 0;
};
this.fn3 = function () {
return 0;
};
}
MyClass.prototype.fn1 = function () {
return 0;
};
return MyClass;
}());
正如您所看到的,只有fn1
是附加到原型的方法,而其他两个只是属性(在构造函数中分配)。