2014-06-08 6 views
5

왜이 코드가 작동하지 않습니까? 여기확장에서 돌연변이 함수를 만드는 방법 Swift를 사용하여 Int를 반환 하시겠습니까?

protocol ExampleProtocol { 
    var simpleDescription: String { get } 
    mutating func adjust() 
} 
extension Int: ExampleProtocol { 
    var simpleDescription: String { 
    return "The number \(self)" 
    } 
    mutating func adjust() { 
     self += 42 
    } 
} 
var x:Int = 7 
let y:Int = x.adjust() 

내가

enter image description here

이 프로토콜에 정의를 변경하지 않고() 반환 지능을 조정 만들 수있는 방법이 XCODE에 무엇을 얻을?

답변

5

예, 반환 값을 조정할 수 있습니다. 프로토콜과 클래스의 int를 반환을 정의 다음은 돌연변이 방법 자체를 반환 있습니다

protocol ExampleProtocol { 
    var simpleDescription: String { get } 
    mutating func adjust() -> Int 
} 
extension Int: ExampleProtocol { 
    var simpleDescription: String { 
    return "The number \(self)" 
    } 
    mutating func adjust() -> Int { 
     self += 42 
     return self 
    } 
} 
var x:Int = 7 
let y:Int = x.adjust() //49 
+0

비록 프로토콜을 변경하고 싶지 않습니다! – Carpsen90

+1

프로토콜을 변경할 필요는 없지만 반환 값을 원하면 반환 값을 사용하여 메소드를 구현해야합니다. 구현 된 메서드와 프로토콜 정의 메서드에 동일한 매개 변수와 반환 값이 없으면 여전히 작동하지만 프로토콜을 올바르게 구현 한 것으로 간주되지 않습니다 – connor

3

조정]() 함수는 값을 반환하지 않기 때문에 (그냥 해당 인스턴스의 값을 변경) 당신이 명령에 의해 이것을 얻을 수 있습니다 :

var x:Int = 7 
x.adjust() //adjust x self value 
let y:Int = x //assigne x value to y 

희망이 도움이됩니다.

0

Ques : 거기에있는 프로토콜의 정의를 변경하지 않고 조정 int()를 반환하는 방법은 무엇입니까?

Ans By의 : 없음

정의는/방법의 서명이 그것을 반환 것 입력과 어떤 데이터 유형으로 데리고 무슨 일이 일어나고 있는지 우리에게 알려줍니다.

메소드에서 Int를 반환해야하며 서명은 -> Int으로 끝나야합니다. 그것이 구문입니다! 그것을 바꿀 수 없다.

connor은 필요한 코드를 제공합니다.

관련 문제