0
왜 replacementTextHasLetter 상수는 다음 조건이 지정된 텍스트 필드에 편지에 붙여 넣을 수 없습니까?UITextFieldDelegate의 shouldChangeCharactersIn 메서드 - 소수 구분 기호 및 문자 모두를 검사하는 조건문을 조합 할 수 없습니다.
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let existingTextHasDecimalSeparator = textField.text?.range(of: ".")
let replacementTextHasDecimalSeparator = string.range(of: ".")
let charactersNotAllowed = NSCharacterSet.letters
let replacementTextHasLetter = string.rangeOfCharacter(from: charactersNotAllowed)
if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil && replacementTextHasLetter != nil {
return false
}
return true
}
그러나 별도의 조건부가있을 때 작동합니까?
편집 : 알아 냈습니다. 첫 번째 예제가 작동하기 때문에 불가능합니다. existingTextHasDecimalSeparator & replacementTextHasDecimalSeparator은 기본적으로 텍스트 필드에 10 진수가 있는지 여부와 사용자가 새 필드를 입력하려고하면 false를 반환합니다. 나는 조건에
&& replacementTextHasLetter != nil
을 추가하면 문이 모두 같은 시간에 사실 수 없기 때문에 정말 목적을 제공하지 않습니다. 당신이
'if'조건에 넣으면 "and"가 아닌 "OR"('||')가됩니다. 당신은'||'이 아니라'&&'를 사용하고 있습니다. 너 정말 원하는거야? –
왜 "AND"가 될 수 없습니까? – tophst
수 있습니다. 그것은 당신이 원하는 모든 것이 될 수 있습니다. 그러나 "AND"가 "OR"와 똑같이 행동 할 것으로 기대하지 마십시오. 귀하의 질문은 (내 이해를 의역으로) ... 당신이 게시 한 두 코드 블록이 왜 똑같이 행동하지 않는 이유는 무엇입니까? 대답은 명시 적으로 조건을 결합하기 위해 "AND"를 사용하고 조건을 결합하기 위해 "OR"를 사용하는 것과 암묵적으로 동일하다는 것입니다. "AND"와 "OR"는 매우 다르게 작동합니다. 그 대답이 불충분하다면, 질문을 더 명확히해야 할 수도 있습니다. –