swift Kotlin 変換私メモ

Kotlin書いてAndroidも出来たらなーと思って勉強しているのですが、すぐ忘れそうなので自分が使いそうなものをここにちょこちょ書きました。

ちなみに私はkotlinなら『はじめてのAndroidプログラミング 第3版 』がおすすめです！
とても親切に書かれています！！

swiftなら『詳細! Swift 3 iPhoneアプリ開発 入門ノート Swift3 + Xcode 8対応』がおすすめです！というか大重 美幸さんの本がおすすめです。

昔は難しそうな本とか、タイトルにつられて買って沢山失敗したけど、最近はそんなに失敗していないと思っています。(⇦本が悪いのではなく、自分の知識にあったものを買えていなかった。)

今では少しみて自分でもわかりやすそうな本を探しています！！(自分の知識で読み進めていけそうなもの)

では早速今回内容へ

何かおかしいとこ指摘していただけると助かります(｡･ω･｡)
もっと簡単にかけるよとか…。もっとこうした方がセキュリティ的にはイイと思うよとか。
指摘は優しくしていただけると嬉しいです。:hatching_chick:

書き方としては、

```.text
#1.適当なタイトル

参考url

swift例

kotlin例
```

で行こうと思います。
よろしくお願いします。

ちなみに詳しく見たい方はgithubのcommitで見ていただければと思います。
消して、書いての方法なのでcloneでなくcommitで。
swift →　https://github.com/sachiko-kame/sampleSmallbySwift
Kotlin → https://github.com/sachiko-kame/sampleSmallbyKotlin
#1.enum

参考url
http://kotlinlang.org/docs/reference/enum-classes.html
https://kotlinlang.org/docs/reference/control-flow.html

**swift**

```.swift
let animals:Array<aString> = [.dog, .cat, .turtle]

for one in animals{
    switch one {
    case .dog:
        print("犬か")
    case .cat:
        print("猫か")
    default:
        print("亀かもしれない")
    }
}

enum aString:String{
    case dog = "犬"
    case cat = "猫"
    case turtle = "かめ"
}

```

**kotlin**

```kotlin

val animals = arrayListOf(aString.dog, aString.cat, aString.turtle)

for (one in animals){
    when (one) {
        aString.dog -> println("犬か")
        aString.cat -> println("猫か")
        else -> {
            println("亀かもしれない")
        }
    }
}

enum class aString(val text: String){
    dog("犬"),
    cat("猫"),
    turtle("かめ")
}


```

#2.extension

参考url
https://kotlinlang.org/docs/reference/extensions.html
https://qiita.com/opengl-8080/items/a7cdd746131337e7c9a6

**swift**

```.swift
let sampleText:String = "もしもし"

sampleText.text()

extension String{
    func text(){
        print("自分のテキストは\(self)")
    }
}

```

**kotlin**

```kotlin
val sampleText:String = "もしもし"

sampleText.text()

fun String.text() {
    println("自分のテキストは$this")
}

```

#3.String→Int

参考url
https://kotlinlang.org/docs/reference/basic-types.html

**swift**

```.swift
let numText:String = "100"
print(Int(numText)!)
```

**kotlin**

```kotlin
val numText:String = "100"
println(numText.toInt())
```

#4.配列数カウント

**swift**

```.swift
let numArray = [1, 2, 3, 4, 5]
print(numArray.count)
```

**kotlin**

```kotlin
val numArray = arrayListOf(1, 2, 3, 4, 5)
println(numArray.size)
```

#5.クラスの作成

参考url
https://kotlinlang.org/docs/reference/classes.html
継承系ものってます。Interface(swiftのprotocle的なのも)

**swift**

```.swift
let nameClass = NameClass(name: "カモメ")

nameClass.NameText()

class NameClass{
    var name: String = ""
    
    init(name:String) {
        self.name = name
    }
    
    func NameText(){
        print(self.name)
    }
}
```

**kotlin**

```kotlin
val nameClass = NameClass("カモメ")

nameClass.NameText()

class NameClass(name: String) {
    var name: String = ""

    init {
        this.name = name
    }

    fun NameText(){
        println(this.name)
    }
}
```

コメント:Androidが勝手にクラスに渡す変数名入れてくれるからswiftのラベルなくす _で書くか迷いました。

#6.getとset

参考url
swift→https://kotlinlang.org/docs/reference/properties.html
Kotlin→https://docs.swift.org/swift-book/LanguageGuide/Properties.html

**swift**

```.swift
var sampleSring:String{
    get{
        return ""
    }
    set(text){
        print("あてはめました！\(text)")
    }
}

print(sampleSring)
sampleSring = "カメ吉です"
print(sampleSring)
```

**kotlin**

```kotlin
var sampleString: String
    get() = this.toString()
    set(value) {
        println("あてはめました！$value")
    }

println(sampleString)
sampleString = "カメ吉です"
println(sampleString)

```
コメント:使っている場所は気にしないでください。

#7.Interface
参考url
https://kotlinlang.org/docs/reference/interfaces.html

**swift**

```.swift
protocol MyInterface {
    func bar()
    func foo()
}

class Child: MyInterface {
    func bar() {
        print("バー")
    }
    
    func foo() {
        print("ふー")
    }
}

```

**kotlin**

```kotlin
interface MyInterface {
    fun bar()
    fun foo()
}


class Child : MyInterface {
    override fun bar() {
       println("バー")
    }
    override fun foo(){
        println("ふー")
    }
}
```

#8.辞書
参考url
https://kotlinlang.org/docs/reference/collections.html
https://kotlinlang.org/docs/reference/multi-declarations.html

**swift**

```.swift
let readWriteMap = ["foo":1, "bar":2]
print(readWriteMap["foo"])

for (key, value) in readWriteMap {
    print("\(key)と\(value)")
}
```

**kotlin**

```kotlin
val readWriteMap = hashMapOf("foo" to 1, "bar" to 2)
println(readWriteMap["foo"])

for ((key, value) in readWriteMap) {
    println("$key と $value")
}
```
コメント:結果は同じですがswiftの場合値がnilだとreadWriteMap["foo"]の部分でクラッシュするためnilの場合の??または絶対大丈夫!宣言surukanil許容でラップするかの警告が出るので好きなものを選んでください。


#9.Arrayからのforからのログ出力

**swift**

```.swift
let items:[String] = ["もしもし", "こんにちは"]
        
for item in items {
    print(item)
 }
```

**kotlin**

```.kotlin
val items: Array<String> = arrayOf("もしもし", "こんにちは")

for (item in items) {
    println(item)
}
```



#??これはこれでイイのか悩ましていること
参考url:https://kotlinlang.org/docs/reference/data-classes.html
- swiftのstructはkotlinのdata class で代用すべき?

#まだかけるところまで行っていない
参考url:https://kotlinlang.org/docs/reference/delegation.html
kotlinのdelegation(swiftのdelegate)
swiftの参考は書いてみました

```.swift
protocol sampleprotocol {
    func aaa()
}

class sample{
    var delegate:sampleprotocol? = nil
    
    func a(){
        delegate?.aaa()
    }
}

class BaseClass:sampleprotocol{
    
    var Sample = sample()
    
    init(){
        Sample.delegate = self
    }
    
    func aaa() {
        print("aの時logを出します")
    }
}
```