2017-07-10 27 views
1

私は本からSwiftを学んでおり、Playgroundsを使ってクラスを構築しています。名前のないパラメータは、空の名前 '_'で記述する必要があります。名前のないパラメータは、空の名前「_」を使用して記述する必要がありますか?

スウィフトのアンダースコアは「無視する」ことを意味しますが、アンダースコアに続いてスペースを追加すると、エラーが発生します。パラメータは明示的にわかりやすい明示的な型を必要とするため、パラメータを宣言する必要があります特定のタイプとして。 :)

"名前のないパラメータは空の名前 '_'で記述しなければならないということを正確に知りたいのですが、私のようなnoobにはあまり意味がないからです。ここで

は、この時点までの遊び場までのコードです:

//: Playground - noun: a place where people can play 

import UIKit 

var str = "Hello, playground" 

func fahrenheitToCelsius(fahrenheitValue: Double)-> Double { 

    var result: Double 

    result = (((fahrenheitValue - 32) * 5)/9) 

    return result 
} 

var x = fahrenheitToCelsius(fahrenheitValue: 15.3) 

print(x) 





class Door{ 

    var opened: Bool = false 
    var locked: Bool = false 
    let width: Int = 32 
    let height: Int = 72 
    let weight: Int = 10 
    let color: String = "Red" 

    //behaviors 
    func open(_ Void)->String{ 
     opened = true 
     return "C-r-r-e-e-a-k-k-k...the door is open!" 
    } 

    func close(_ Void)->String{ 
     opened = false 
     return "C-r-r-e-e-a-k-k-k...the door is closed!" 
    } 

    func lock(_ Void)->String{ 
     locked = true 
     return "C-l-i-c-c-c-k-k...the door is locked!" 
    } 

    func unlock(_ Void)->String{ 
     locked = false 
     return "C-l-i-c-c-c-k-k...the door is unlocked!" 
    } 

} 

答えて

2

を使用し、あなたのコードは、このようなものでした。もし

func open(Void)->String{ 
    opened = true 
    return "C-r-r-e-e-a-k-k-k...the door is open!" 
} 

あなたは経験豊富なCプログラマーです。 paramLabelparamNameが同じである場合、それは、このようにすることができ、

func functionName(paramLabel paramName: ParamType) -> ResultType 

スウィフトで

、(方法を含む)は、単一のパラメータの関数は、ヘッダのこの種を持っている必要があり

func functionName(paramName: ParamType) -> ResultType 

_paramLabelparamNameの両方に使用できます。これは、単一の引数を関数に渡す必要があり、関数内で使用されていないSwiftの有効な関数ヘッダーですN体:

func functionName(_: ParamType) -> ResultType 

しかし、古いスウィフトに、あなたが同じ場合には、このような何かを書くことができます:

func functionName(ParamType) -> ResultType 

現在スウィフトで有効な関数のヘッダーではありません。したがって、Swiftコンパイラがこの種の関数ヘッダを見つけると、unnamed parameters must be written with the empty name '_'のような診断メッセージが生成され、ParamTypeの前に_:が必要であることが示唆されています。


実際の修正はLawlietの回答に含まれています。関数にパラメータがない場合は、Voidをパラメータの中に入れる必要はありません。

func open()->String{ 
    opened = true 
    return "C-r-r-e-e-a-k-k-k...the door is open!" 
} 
1

パラメータは、明示的な型が必要です。したがって、関数の宣言のfunc open(_ Void)->Stringコンパイルエラーが発生します。引数を持たない関数を書くだけなら、_ Voidを削除してください。 Appleのスウィフトの本によると、アンダースコア(_)はスウィフトの様々な例で使用することができ

func open()->String{ 
    opened = true 
    return "C-r-r-e-e-a-k-k-k...the door is open!" 
} 

ファンクション:パラメータの引数ラベルを使用しない場合は、明示的な引数を持たずに_を使用できます。数値リテラル

func sumOf(_ arg1: Int, arg2: Int) -> Int{ 
    return arg1 + arg2 
} 
sumOf(1, arg2: 5) 

:INTとフロートの両方が読みやすくを得るために_を含めることができます。

let oneBillion = 1_000_000_000 
let justOverOneThousand = 1_000.000_1 

制御フロー:あなたはシーケンスからの各値を必要としない場合は、変数名の代わりに、Wildcard Pattern別名、_を使用して値を無視することができます。

let base = 2 
let power = 10 
var result = 1 

for _ in 1...power { 
    result *= base 
} 

タプル:あなたはタプルの部分を無視する_を使用することができます。

let http404Error = (404, "Not Found") 

// Decompose to get both values 
let (statusCode, statusMessage) = http404Error 
print("The status code is \(statusCode)") 
print("The status message is \(statusMessage)") 

// Decompose to get the status code only 
let (justTheStatusCode, _) = http404Error 
print("The status code is \(justTheStatusCode)") 
1

私が理解しているように、これは迅速に実行され、尊重される目的Cからの実践です。客観的なCスタイルでは、パラメータに名前を付けますが、説明や読みやすさのためにパラメータを必要としない場合は、_を使用してください。あなたの機能であなたのパラメータに名前を付けたいん

tableView(_ tableView: UITableView.......) 

// in swift 

protocol MyCustomProtocol: AnyObject { 
    func controller(_ controller: MyCustomControllerClass, DidFinishLoadingSomething something: Type) 
} 

、あなたがすることができます - -

class CustomClass { 
    init(withUserId id: String) 
} 
// to use the above: 
CustomClass(withUserId: "123123") 

func insert(newIndexPath indexPath: IndexPath) 
... 
insert(newIndexPath: myNewIndexPath) // This is how you would use the above function 

することを助けるためにここに

init(_ parameter: Type) 

Objective Cのプロトコルもこの命名規則に従ってください例です具体的には、func openにパラメータ名は必要ないと指定しました。しかし、あなたはあなたのパラメータが何であるかは決して決まっていないあなたはfunc open(_ open: Bool) -> String {それを呼び出す、パラメータを渡すか、またはあなたがその関数のパラメータを使用しない場合は、unnamed parameters must be written with the empty name '_'を得るとき、ちょうど私が推測するfunc open() -> String {

関連する問題