什么是 Swift “扩展”的 dart 等价物?

Posted

技术标签:

【中文标题】什么是 Swift “扩展”的 dart 等价物?【英文标题】:What is the dart equivalent to Swift “extensions”? 【发布时间】:2019-07-17 21:22:06 【问题描述】:

关键字/保留字extension 通过使用标准框架中的现有类而不对它们进行子类化,从而使代码更加简洁。 Dart 中是否有允许相同行为的关键字?

extension Double 
    var mm: Double  return self / 1_000.0 


let oneInch = 25.4.mm
print("One inch is \(oneInch) meters")

【问题讨论】:

它似乎还没有实现:github.com/dart-lang/language/issues/40github.com/dart-lang/language/issues/42。扩展类型呢? 我发现 swift 中的extension 可以让代码更清晰,这是类型扩展不提供的。很高兴知道改进存在一个未解决的问题。谢谢。 【参考方案1】:

他们终于来了?

来自 dart 2.6 版(不是 100% 确定)。

class Foo 
  printFoo()  
    print("Foo");
  


extension Bar on Foo  
  printBar()  
    print("Bar");
  


void main() 
  final foo = Foo();
  foo.printFoo();
  foo.printBar();

打印:

酒吧

你可以在dart pad.试试看

【讨论】:

【参考方案2】:

扩展方法目前正在语言中实现。

https://github.com/dart-lang/language/projects/1#card-18758939

规格文件

https://github.com/dart-lang/language/blob/master/accepted/future-releases/static-extension-methods/feature-specification.md

【讨论】:

【参考方案3】:

TL;DR:遗憾的是,Dart 不支持扩展方法。

在 Dart 存储库中,为此有一个 issue about how to add new functionality to existing types。 更具体地说,extension methods 和 extension types 存在问题。

当然,您始终可以使用新的classes,extend 现有类在它们之上引入了新功能。 然而,这只适用于非原始类,所以让我们希望最好。 您最好的选择可能是对上面链接的问题进行投票。

【讨论】:

以上是关于什么是 Swift “扩展”的 dart 等价物?的主要内容,如果未能解决你的问题,请参考以下文章

Java 中 Dart 的 StreamController 等价物是啥?

Dart/Flutter 中的 TimingLogger 等价物是啥?

Swift 中的 @autoreleasepool 等价物是啥?

什么是 NSObject<Protocol> 的 swift 等价物?

对于Java中的静态块,swift中的等价物是什么

isnan() 的 Swift 等价物是啥?