2014-06-04 2 views
9

을 내가 기본 인자에 대해 배우고 난 뭔가 이상한의 좌초 :스위프트 오류 : 인수 라벨 누락 '이름 :'전화

Playground execution failed: error: <REPL>:9:7: error: missing argument label 'name:' in call 
greet("jiaaro") 
    ^
     name: 

I :이 오류가 발생합니다

import UIKit 

func greet(name: String = "world") { 
    println("hello \(name)") 
} 

greet("jiaaro") 

이해하고 싶습니다. greet(name: "jiaaro")하지만 은 필요하지 않은 이유를은 이해하지 못합니다.

+0

가능한 복제본 [Swift : 전화에서 인수 레이블 'xxx'누락] (http://stackoverflow.com/questions/24050844/swift-missing-argument-label-xxx-in-call) – jtbandes

+0

@jtbandes이 질문 나는 나는 그 질문에 처음 물었을 때 (정확히 6 분 후에) 연결된 질문에 대한 링크를 (코멘트에) 게시했습니다. – Jiaaro

답변

11

스위프트 기능은 로컬 및 외부 인수 이름을 지정할 수 있습니다

func greet(who name: String = "world") { 
    println("hello \(name)") 
} 

// prints "hello world" 
greet() 

// prints "hello jiaaro" 
greet(who:"jiaaro") 

// error 
greet("jiaaro") 

// error 
greet(name: "jiaaro") 

이 동작의 선택을 취소하려면 외부 이름에 밑줄을 사용할 수 있습니다.

func greet(#name: String = "world", hello: String = "hello") { 
    println("\(hello) \(name)") 
} 

// prints "hi jiaaro" 
greet(name: "jiaaro", hello: "hi") 
:

func greet(name: String = "world", _ hello: String = "hello") { 
    println("\(hello) \(name)") 
} 

// prints "hello world" 
greet() 

// prints "hello jiaaro" 
greet("jiaaro") 

// prints "hi jiaaro" 
greet("jiaaro", "hi") 

// error 
greet(name: "jiaaro") 

The following is now disallowed in Swift 2.0, see below for equivalent code.

당신은 첫 번째 매개 변수에 대해 동일한 로컬 및 외부 이름을 사용하도록 # 접두사를 사용할 수 있습니다 : 첫 번째 매개 변수가 암시 적으로 "외부 이름"동작을 사용하지 않습니다

Swift 2.0 code:

func greet(name name: String = "world", hello: String = "hello") { 
    println("\(hello) \(name)") 
} 

// prints "hi jiaaro" 
greet(name: "jiaaro", hello: "hi") 
+1

이 두 라인의 차이점은 무엇입니까? // 인쇄 "안녕하세요 jiaaro" 인사 ("jiaaro") // 오류 인사 ("jiaaro") –

+0

@SamBudda 죄송합니다 ... 복사/붙여 넣기 오류 - 나는 놀이터 나에 충돌했기 때문에이 물건을 다시 입력 유지했다 . 3 번째 또는 4 번째 시간에 간과하여 예제를 다시 작성했습니다. – Jiaaro

+0

XCode 6.1에는 더 이상 첫 번째 인수에 이름 라벨이 필요하지 않습니다. 실제로 레이블을 사용하면 경고 메시지가 나타납니다. 매개 변수에 '_'이 (가) 있습니다. 'name'에는 키워드 인수 이름이 없습니다. –

3

Swift는 여러 개의 초기화 프로그램이있는 클래스를 지원하므로 기본적으로 인수 레이블이 필요합니다. 인수 레이블의 이점은 Swift가 사용할 초기화 프로그램을 추론 할 수있는 능력에서 비롯됩니다. 인수 유형뿐만 아니라 인수 이름도 있습니다.

struct Celsius { 
    var temperatureInCelsius: Double = 0.0 

    init(fromFahrenheit fahrenheit: Double) { 
     temperatureInCelsius = (fahrenheit - 32.0)/1.8 
    } 

    init(fromKelvin kelvin: Double) { 
     temperatureInCelsius = kelvin - 273.15 
    } 
} 

let boilingPointOfWater = Celsius(fromFahrenheit: 212.0) 
// boilingPointOfWater.temperatureInCelsius is 100.0 

let freezingPointOfWater = Celsius(fromKelvin: 273.15) 
// freezingPointOfWater.temperatureInCelsius is 0.0 

자세한 내용은이 페이지를 참조하십시오 : https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-XID_272

+1

더 나은 객관적인 C 호환성;) – Jiaaro

+0

그것도 생각하지 않았습니다! – HZN

1

난 그냥

func greet(name: String = "world") { 
    print("hello \(name)") 
} 

greet("jiaaro") 

은 엑스 코드에서 잘 작동이 지금 당신의 코드를 추가하고 싶었, 난 그냥 "인쇄"와 "에 println을"로 변경