2017-08-30 29 views
2

也許這個問題在official doc回答,但我沒有看到它...如何在類文件中放置Kotlin擴展?

在斯威夫特我們習慣於寫類似

class Jazz { 
... 
} 

extension Jazz { 
    func swing() { 
    ... 
    } 
} 

,並放置在一個整體的代碼段文件,說Jazz.swift

我們似乎無法在Kotlin中做相應的事情?我總是發現自己的寫作,例如一個Jazz.kt和一個JazzExtensions.kt,這並不總是構建代碼的最清晰的方式。

對此有任何意見。

+1

是不是swift代碼等同於將'class Jazz'和'fun Jazz.swing(){}'放在同一個Kotlin文件中? – BakaWaii

+0

爲什麼你會使用擴展名,而不是隻將該函數作爲類中的普通函數添加? – s1m0nw1

+0

@BakaWaii是的,顯然它是:)。我發誓我以前曾嘗試過,但沒有運氣:P。 – Algar

回答

2

您可以將擴展功能類的內部或外部:

外:

class Jazz { ... } 

fun Jazz.bar() { 
    println("hello") 
} 

內(在companion object):

import YOUR_PACKAGE.Jazz.Companion.bar 

fun main(args: Array<String>) { 
    Jazz().bar() 
} 

class Jazz { 
    companion object { 
     fun Jazz.bar() { 
      println("hello") 
     } 
    } 
} 
+0

謝謝!儘管如此,我仍然缺少一個'extension'關鍵字。也許在明亮的Kotlin未來。 – Algar

1

這不是從斯威夫特很大的不同

class Jazz { 
    val a = "Jazz" 
} 

fun Jazz.swing() = a 

//////////// 

fun main(args: Array<String>) { 
    print(Jazz().swing()) // >>> Jazz 
} 
+1

哈哈哈,我可以發誓我已經試過了......該死,這讓尷尬很快:)。感謝您的回答,但我已經接受@ guenhter的,因爲這是更詳細的。 – Algar

+0

他也是第一個:) –