Latest web development tutorials

スウィフト関数

スウィフト関数は、特定のタスクを別々のコードブロックを実行するために使用されます。

スウィフトは、複雑なObjective-Cの言語スタイルのアプローチへの単純なCスタイルの関数を表現するために統一された構文を使用しています。

  • 関数宣言:コンパイラの関数名、戻り値の型、およびパラメータを伝えます。

  • 関数定義:エンティティの機能を提供します。

スウィフト関数は、パラメータの型と戻り値の型が含まれています。


関数定義

キーワードfuncを使用してスウィフト定義関数

定義された関数は、1つ以上の入力パラメータと戻り値の型を指定することができます。

各機能は、その機能を記述するための関数名を持っています。 関数名と関数呼び出しのタイプのパラメータ値。 次伝達関数のパラメータは、同じパラメータリストでなければなりません。

関数のパラメータリストで渡される引数の順序は同じでなければなりません- >あなたが関数の戻り値の型を定義した後。

文法

func funcname(形参) -> returntype
{
   Statement1
   Statement2
   ……
   Statement N
   return parameters
}

我々は、データ型の文字列、文字列の戻り値のパラメータをw3big関数と呼ばれる関数を定義する下:

import Cocoa

func w3big(site: String) -> String {
    return site
}
print(w3big("www.w3big.com"))

上記プログラム実行出力は、次のとおりです。

www.w3big.com

関数呼び出し

私たちは同じでなければなりませんためのパラメータ伝達関数のパラメータリストの種類に対応する関数名とパラメータ値を介して関数を呼び出すことができます。

我々は、我々は関数本体が直接返されるデータ型を返します後に渡されたString型の引数でなければなりません関数の引数が渡された呼び出し、w3big関数と呼ばれる関数、パラメータのデータ型Stringのサイトを定義し、以下に文字列。

import Cocoa

func w3big(site: String) -> String {
    return site
}
print(w3big("www.w3big.com"))

上記プログラム実行出力は、次のとおりです。

www.w3big.com

関数の引数

関数は、我々はまた、タプル(タプル)を使用する関数を1つまたは複数のパラメータを渡すことができ、1つ以上のパラメータを受け入れることができます。

import Cocoa

func mult(no1: Int, no2: Int) -> Int {
   return no1*no2
}
print(mult(2, no2:20))
print(mult(3, no2:15))
print(mult(4, no2:30))

上記プログラム実行出力は、次のとおりです。

40
45
120

パラメータなしのファンクション

私たちは、パラメータなしで関数を作成することができます。

構文:

func funcname() -> datatype {
   return datatype
}

import Cocoa

func sitename() -> String {
    return "本教程"
}
print(sitename())

上記プログラム実行出力は、次のとおりです。

本教程

関数として値を返すタプル

関数の戻り値の型は、文字列、整数、浮動小数点型にすることができます。

タプルは、配列と同様であり、違いは、タプル要素は括弧を使用して、任意のタイプのものであってもよいです。

あなたは、関数のタプル(タプル)から返された合成値としての値の複数のタイプを持つことができます。

次の例では、名前のMINMAXの定義(_ :)役割の機能は、int配列の最小値と最大値を特定することです。

import Cocoa

func minMax(array: [Int]) -> (min: Int, max: Int) {
    var currentMin = array[0]
    var currentMax = array[0]
    for value in array[1..<array.count] {
        if value < currentMin {
            currentMin = value
        } else if value > currentMax {
            currentMax = value
        }
    }
    return (currentMin, currentMax)
}

let bounds = minMax([8, -6, 2, 109, 3, 71])
print("最小值为 \(bounds.min) ,最大值为 \(bounds.max)")

MINMAX(_ :)関数は2つのint値のタプルを返し、あなたは、クエリがで関数の値を返すように、これらの値は、最小値と最大値としてマークされている名前でそれらにアクセスすることができます。

上記プログラム実行出力は、次のとおりです。

最小值为 -6 ,最大值为 109

あなたが返されるタプルがnilでない必要がありますが不明な場合は、オプションのタプル型を返すことができます。

あなたは、このような(整数、整数)か、それとも(文字列、INT、ブール値)として、オプションのタプルを定義する閉じ括弧のタプル型の後に疑問符を置くことができますか?

などの任意のタプル型メモ(Int, Int)?タプルのような任意のタイプが含まれています(Int?, Int?)違うのです。オプションのタプル型を、全体のタプルは任意であり、だけではなく、各要素値タプル。

フロントminMax(_:)関数は、2つの含まれている返すInt値のタプルを。 しかし、もし関数は、着信アレイ上の任意のセキュリティチェックを実行しないarray上で定義したパラメータは、空の配列minMax(_:)アクセスしようとするarray[0]実行時エラーがトリガされます。

安全にこの「空の配列」の問題に対処するには、 minMax(_:)配列が空の場合は、オプションのタプルの戻り値の型とリターンを使用するようにリライト機能nil

import Cocoa

func minMax(array: [Int]) -> (min: Int, max: Int)? {
    if array.isEmpty { return nil }
    var currentMin = array[0]
    var currentMax = array[0]
    for value in array[1..<array.count] {
        if value < currentMin {
            currentMin = value
        } else if value > currentMax {
            currentMax = value
        }
    }
    return (currentMin, currentMax)
}
if let bounds = minMax([8, -6, 2, 109, 3, 71]) {
    print("最小值为 \(bounds.min),组大值为 \(bounds.max)")
}

上記プログラム実行出力は、次のとおりです。

最小值为 -6,组大值为 109

関数の戻り値なし

ここで、(_ :)機能の別のバージョンは、関数は戻り値の型が指定されていない、チュートリアルのURLパラメータの公式サイトを受け取り、代わりにそれを返すの直接出力文字列値w3bigされています。

import Cocoa

func w3big(site: String) {
    print("本教程官网:\(site)")
}
w3big("http://www.w3big.com")

上記プログラム実行出力は、次のとおりです。

本教程官网:http://www.w3big.com

機能パラメータ名

関数の引数は、外部パラメータ名とローカルパラメータ名を持っています。

ローカルパラメータ名

使用するための内部実装の関数内のローカルパラメータ名。

func sample(number: Int) {
   println(number)
}

ローカルパラメータ名の上記の例の数は、関数本体で使用することができます。

import Cocoa

func sample(number: Int) {
   print(number)
}
sample(1)
sample(2)
sample(3)

上記プログラム実行出力は、次のとおりです。

1
2
3

外部パラメータ名

あなたは、スペースで区切って、ローカルパラメータ名、関数が呼び出される関数に渡されたパラメータの外部パラメータ名の前に外部パラメータ名を指定することができます。

あなたは、次の2つの関数のパラメータ名を定義し、それを呼び出すことができます。

import Cocoa

func pow(firstArg a: Int, secondArg b: Int) -> Int {
   var res = a
   for _ in 1..<b {
      res = res * a
   }
   print(res)
   return res
}
pow(firstArg:5, secondArg:3)

上記プログラム実行出力は、次のとおりです。

125

あなたが外部パラメータ名を指定する場合、関数が呼び出されることに注意してください、あなたは、外部パラメータ名を使用する必要があります。


変数パラメーター

可変パラメータは、ゼロ以上の値を受け入れることができます。 関数が呼び出されるときは、関数の引数を指定する変数パラメータを使用することができ、その数は不明です。

変数の型で名前による変数のパラメータは、(...)の方法を定義するために挿入します。

import Cocoa

func vari<N>(members: N...){
    for i in members {
        print(i)
    }
}
vari(4,3,5)
vari(4.5, 3.1, 5.6)
vari("Google", "Baidu", "w3big")

上記プログラム実行出力は、次のとおりです。

4
3
5
4.5
3.1
5.6
Google
Baidu
w3big

定数、変数およびI / Oパラメータ

一般的にデフォルトパラメータを使用すると、その値を変更することはできません、クエリを使用することができます唯一のパラメータである、関数で定義された定数パラメータです。

あなたは、変数パラメータを宣言する場合は、このパラメータの値を変更することができるように、あなたは前にVARを追加することができます。

例えば:

func  getName(var id:String).........

この場合、ID値は、関数内で変更されることがあります。

通常、デフォルトのパラメータは参照によって渡された値ではなく呼び出しによって渡されます。 だから、機能変更内の着信パラメータは、元のパラメータには影響を与えません。 ただ、このパラメータのコピーを渡されました。

可変パラメータは、上記のように、唯一の関数の本体に変更することができます。 解消されないあなたは関数がパラメータの値を変更することができますしたい、とあなたは、関数呼び出しの終了時にこれらの変更をしたい場合は、このパラメータは、入力および出力パラメータとして(インアウトパラメータを)定義されて置いてください。

キーワードinoutの追加する前に、入力および出力パラメータ、パラメータ定義を定義する場合。 入力および出力パラメータは関数の値を通過した、関数の値が変更され、その後、元の値を置き換える機能を広めます。

import Cocoa

func swapTwoInts(var a:Int,var b:Int){
    
    let t = a
    a = b
    b = t
}

var x = 0,y = 100
print("x = \(x) ;y = \(y)")

swapTwoInts(x, b:y)
print("x = \(x) ;y = \(y)")

上記プログラム実行出力は、次のとおりです。

x = 0 ;y = 100
x = 0 ;y = 100

修正はINOUTキーワードを使用することです。

import Cocoa

func swapTwoInts(inout a:Int,inout b:Int){
    
    let t = a
    a = b
    b = t
}

var x = 0,y = 100
print("x = \(x) ;y = \(y)")

swapTwoInts(&x, b:&y)
print("x = \(x) ;y = \(y)")

上記プログラム実行出力は、次のとおりです。

x = 0 ;y = 100
x = 100 ;y = 0

関数型と使用

各関数は、種の種類の特定の機能を持つ関数のパラメータの型と戻り値の型。

func inputs(no1: Int, no2: Int) -> Int {
   return no1/no2
}

例としては、次のとおりです:

import Cocoa

func inputs(no1: Int, no2: Int) -> Int {
    return no1/no2
}
print(inputs(20,no2:10))
print(inputs(36,no2:6))

上記プログラム実行出力は、次のとおりです。

2
6

機能上記のintはint型の値を返し、2種類のパラメータを定義します。

次に、関数は、String型、String型の戻り値のパラメータを定義し、次の関数を見てください。

Func inputstr(name: String) -> String {
   return name
}

また、次のように関数のパラメータと任意の型を定義することができます。

import Cocoa

func inputstr() {
   print("本教程")
   print("www.w3big.com")
}
inputstr()

上記プログラム実行出力は、次のとおりです。

本教程
www.w3big.com

関数型を使用します

スウィフトでは、他のタイプと同様に、関数型を使用。 たとえば、型の関数とそれに割り当てられた適切な関数の定数または変数を定義することができます。

var addition: (Int, Int) -> Int = sum

解像度:

」という定義addition 、変数、パラメータと戻り値の型のことはあるInt 、この新しい変数ポイントましょうsum関数を。 "

sumaddition同じ型を持って、上記の操作は有効です。

さて、あなたは、割り当てられた機能を呼び出すために追加を使用することができます。

import Cocoa

func sum(a: Int, b: Int) -> Int {
   return a + b
}
var addition: (Int, Int) -> Int = sum
print("输出结果: \(addition(40, 89))")

上記プログラム実行出力は、次のとおりです。

输出结果: 129

戻り値の型としてパラメータの型、関数型として機能タイプ

私たちは、別のパラメータへのパラメータとして機能することができます。

import Cocoa

func sum(a: Int, b: Int) -> Int {
    return a + b
}
var addition: (Int, Int) -> Int = sum
print("输出结果: \(addition(40, 89))")

func another(addition: (Int, Int) -> Int, a: Int, b: Int) {
    print("输出结果: \(addition(a, b))")
}
another(sum, a: 10, b: 20)

上記プログラム実行出力は、次のとおりです。

输出结果: 129
输出结果: 30

ネストされた関数

ネストされた関数は、関数内の新しい関数の定義を参照し、外部関数は、関数定義内の関数を呼び出すことができます。

例としては、次のとおりです:

import Cocoa

func calcDecrement(forDecrement total: Int) -> () -> Int {
   var overallDecrement = 0
   func decrementer() -> Int {
      overallDecrement -= total
      return overallDecrement
   }
   return decrementer
}
let decrem = calcDecrement(forDecrement: 30)
print(decrem())

上記プログラム実行出力は、次のとおりです。

-30