2017-10-24 1 views
0

값이 nil인지 여부와 기본값을 부여하는지 확인하는 함수를 만들려고합니다. 이것은 내가 지금까지 무엇을 가지고 :값에 할당 할 수 없습니다 : '메시지'는 함수에서 상수입니다.

func appendMessage(message: String?, fixLength: Int){ 
     if let message = message { 
     } else { 
      message = DEFAULT_CHAR//this is a default value, error is here 
     } 
      messageBody.append(getFixedLengthString(message, fixLength)) 
    } 
+2

함수 입력 인수는 'Swift'에서 불변하므로 오류가 발생합니다. –

답변

5

:

func appendMessage(message: String?, fixLength: Int) { 
    if let message = message { 
     messageBody.append(getFixedLengthString(message, fixLength)) 
    } else { 
     messageBody.append(getFixedLengthString(DEFAULT_CHAR, fixLength)) 
    } 
} 

은 아마 당신은이 하나의 라이너를 시도 할 수 있습니다. else 안에 message 매개 변수를 업데이트하려고합니다. if let을 통해 생성 된 message 변수도 상수이지만 해당 범위는 else이 아니고 if 내부 일 뿐이며 전체는 if/else 블록 이후입니다. 그러므로 getFixedLengthString으로 전화를 걸려고 시도하는 message 변수는 원래 message 매개 변수입니다. 그 왼쪽이 경우, 오른쪽의 값 nil 아니고 경우

func appendMessage(message: String?, fixLength: Int){ 
    messageBody.append(getFixedLengthString(message ?? DEFAULT_CHAR, fixLength)) 
} 

?? 연산자 왼쪽의 값을 반환

가장 간단한 해결책은 ?? (무풍 유착) 연산자를 사용하는 측면은 nil입니다.

0

당신이 당신의 논리/코드의 자세한 내용을 이해하려고 노력한다면, 당신은 아주 쉽게 해결할 수있다.

이 것이 작동해야합니다. 당신은 message 매개 변수가 일정하다는 명백한 이유로 오류가

messageBody.append(getFixedLengthString(message == nil ? DEFAULT_CHAR : message!, fixLength)) 
관련 문제