๋๋ ๊ณต๋ฐฑ๊ณผ ๊ด๋ จํ์ฌ ๋ ๊ฐ์ง ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค.
"[0000] [0000] [0000] [0000] [999]"
์ ์ฉ ์นด๋์ฉ ๋ง์คํฌ๊ฐ ์์ง๋ง ์ฃผ์ ๋ฌธ์ ๋ ์ฌ์ฉ์๊ฐ ํ์ ์ซ์ ์
๋ ฅ์ ๋ง์น๋ฉด ์ฌ์ฉ์๊ฐ [999]
์ ์ ๊ณต๋ฐฑ์ ์
๋ ฅํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ์๋ฃ๋์ง ์์๋ค๊ณ ํ์๋๋ค๋ ๊ฒ์
๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์ต๋๊น?
์ด๋ฆ ์
๋ ฅ์ ์ํ ์ด ๋ง์คํฌ๊ฐ ์์ต๋๋ค: [Aโฆ]
ํ์ง๋ง ๊ณต๋ฐฑ ์
๋ ฅ์ ํ์ฉํ์ง ์์ผ๋ฉฐ ์ด์ ๋ํ ๊ธฐํธ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ณต๋ฐฑ์ ๋ํ ๋ง์ถค ํ๊ธฐ๋ฒ์ ๋ง๋ค๋ ค๊ณ ์๋ํ์ง๋ง ์ฑ๊ณตํ์ง ๋ชปํ์ต๋๋ค. ํ๋ ์ด์์ ๋ฌธ์์ ์ ํ์ ๊ณต๋ฐฑ์ ์ด๋ป๊ฒ ํ์ฉํฉ๋๊น?
์ด ๋ฉ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
์๋
ํ์ธ์ @caioremedio์
๋๋ค!
์ง๋ฌธํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์ ์ฌ์ ์ธ ๊ธฐ๋ฅ ์์ฒญ์ด ์ด๋ฏธ ์์ต๋๋ค.
๋จผ์ "[0000] [0000] [0000] [0000] [999]"
์ ์ฉ ์นด๋ ๋ง์คํฌ ๋ง์ถค ํ๊ธฐ๋ฒ์ด ๋ต์ด ๋ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ ํ์ ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ํ์ํฉ๋๋ค.
"[0000] [0000] [0000] [0000][s][999]"
Notation(character: "s", characterSet: CharacterSet(charactersIn: " "), isOptional: true)
- ์๋ํด๋ณด๊ณ ๊ฒฐ๊ณผ๋ฅผ ์๋ ค์ฃผ์ธ์.
๋์งธ , Compiler
์์ ๋
ผ๋ฆฌ์ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ํ์ฌ ์ฐ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด์ ๋ฌธ์์ ๋ฐ๋ผ [โฆ]
ํน์ฑ์ ์์ํ๋ ค๊ณ ํ๋ฉฐ ์ด ์ด์ ๋ฌธ์์ ๋ํ ์ฌ์ฉ์ ์ง์ ํ๊ธฐ๋ฒ ์
ํ์์ ๋ฐ๋ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ์๊ฒ ์ฃ ?
์๋ ํ์ธ์ @taflanidi๋ , ๋น ๋ฅธ ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค.
์ฒซ์งธ: [s]
์๋ํ์ง๋ง ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ์๋์ผ๋ก ์ฝ์
ํ์ง ์์ต๋๋ค. ๋ด๊ฐ ์ฌ๊ธฐ์์ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ต๋๊น?
๋ด๊ฐ์ ์๋ธ ํด๋์ค ์ฌ์ฉํ๊ณ MaskedTextFieldDelegate
, ๋๋ ๋ช ๊ฐ์ง ์ฌ์ฉ์ ์ง์ inits ์์ฑ customNotations
:
class NotifyingMaskedTextFieldDelegate: MaskedTextFieldDelegate {
weak var editingListener: NotifyingMaskedTextFieldDelegateListener?
override init(format: String) {
super.init(format: format)
}
convenience init(format: String, customNotations: [Notation]) {
self.init(format: format)
self.customNotations = customNotations
}
convenience init(format: String, customNotation: Notation) {
self.init(format: format, customNotations: [customNotation])
}
}
์ด๊ธฐํ ์ค:
NotifyingMaskedTextFieldDelegate(
format: "[0000] [0000] [0000] [0000][s][999]",
customNotation: Notation(character: "s",
characterSet: CharacterSet(charactersIn: " "),
isOptional: true))
๋ ๋ฒ์งธ: ์๊ฒ ์ต๋๋ค. ํ์ง๋ง ์ปดํ์ผ๋ฌ์ ๊ณต๋ฐฑ๋ง ํฌํจํ ์ ์์ต๋๊น(์ซ์ ๋ฐ ๋ฌธ์ ํฌํจ)?
๋์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์๋ ํ์ธ์ @caioremedio ,
[]๋ก ์๋ํ์ง๋ง ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ์๋์ผ๋ก ์ฝ์ ํ์ง ์์ต๋๋ค. ๋ด๊ฐ ์ฌ๊ธฐ์์ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ต๋๊น?
์, ์์ด๋ฒ๋ ธ๋ค์. ์ฌ์ฉ์ ์ง์ ํ๊ธฐ๋ฒ ์ถ๊ฐ ์ ๋ณด ์น์ ์ ๋์์ ์ธ๊ธํ์ต๋๋ค.
MaskedTextFieldDelegate์ ํ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ customNotations์ ๋ํ ๋ช ๊ฐ์ง ์ฌ์ฉ์ ์ ์ ์ด๊ธฐํ๋ฅผ ๋ง๋ค์์ต๋๋ค.
์ค์ ๋ก ํ์ ํด๋์ค๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค. MaskedTextFieldDelegate
์๋ ํด๋น ๊ณต์ฉ ๋ณ์ customNotations
๊ฐ ์์ผ๋ฉฐ ์ฌ๊ธฐ์ ํ๊ธฐ๋ฒ ๋ชฉ๋ก์ ํ ๋นํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋ํ, ์ด์ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ถ์ถ๋ ๊ฐ์ ๋ํด ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก ์ด ๋ฌธ์ ๋ 1234123412341234 999
โ ๋ถํ์ํ ๊ณต๊ฐ์
๋๋ค.
๊ทธ๋ฌ๋ ๊ฐ์น๋ฅผ ์ ์ํ๊ธฐ ์ํด ํตํฉํ ์ ์๋ ๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค. Mask
์ธ์คํด์ค ๋ฐ ๋ํผ MaskedTextFieldDelegate
๋ acceptableTextLength
, totalTextLength
๋ฑ๊ณผ ๊ฐ์ด ํ
์คํธ ๋ฐ ์ถ์ถ๋ ๊ฐ์ ๋ํด ์ผ๋ จ์ ๊ณ์ฐ๋ ๋ฉํธ๋ฆญ์ ์ ๊ณตํฉ๋๋ค.
MaskedTextFieldDelegate.acceptableValueLength() ๋ ๊ทํ์ ๊ฒฝ์ฐ 16
๋ฅผ ๋ฐํํ๋ฏ๋ก ์ถ์ถ๋ ๊ฐ์ ๊ธธ์ด๋ฅผ ๋น๊ตํ์ฌ ์
๋ ฅ์ด ์๋ฃ๋์์์ ์ ์ํ ์ ์์ต๋๋ค.
๋์์ ์ ์ํ๋ ค๋ฉด Compiler
์ ํ ๋ฌธ์์ ํน์ฑ์ ์์์ผ ํฉ๋๋ค.
[Aโฆ]
^ this one defines, what symbols are accepted
ํ์ฌ Compiler
๋ A a 0 9 - _
์ ๊ธฐ๋ณธ ์งํฉ์ผ๋ก ์ ํ๋ฉ๋๋ค. ํ์ํ ๋ง์คํฌ์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ง์ ํ๊ธฐ๋ฒ์ด ์๋ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ๊ตฌํํด์ผ ํ ๊ธฐ๋ฅ์
๋๋ค.
์, ์์ด๋ฒ๋ ธ๋ค์. ์ฌ์ฉ์ ์ง์ ํ๊ธฐ๋ฒ ์ถ๊ฐ ์ ๋ณด ์น์ ์ ๋์์ ์ธ๊ธํ์ต๋๋ค.
๋ง์์ฌ, ๋์น์ฑ์ง ๋ชปํ์ด์.
์ค์ ๋ก ํ์ ํด๋์ค๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค. MaskedTextFieldDelegate์๋ ํด๋น ๊ณต์ฉ ๋ณ์ customNotations๊ฐ ์์ผ๋ฉฐ ์ฌ๊ธฐ์ ํ๊ธฐ๋ฒ ๋ชฉ๋ก์ ํ ๋นํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์๋์, ์ฌ์ฉ์ ์ง์ ํ๊ธฐ๋ฒ์ ์ํด ์๋ธํด๋์ฑํ์ง ์๊ณ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์( UITextField
๋ฉ์๋ ์ฌ์ ์)์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋๋ ์๋ ์์ฑ์ด ์๋ํ์ง ์๋ ๊ฒ์ด ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ํ๊ณ ์๋ ๋ชจ๋ ๊ฒ์ ์ผ์ต๋๋ค.
MaskedTextFieldDelegate.acceptableValueLength()๋ ๊ทํ์ ๊ฒฝ์ฐ 16์ ๋ฐํํ๋ฏ๋ก ์ ๋ ฅ์ด ์๋ฃ๋์์์ ์ ์ํ๊ธฐ ์ํด ์ถ์ถ๋ ๊ฐ์ ๊ธธ์ด๋ฅผ ๋น๊ตํ ์ ์์ต๋๋ค.
๊ต์ฅํฉ๋๋ค. ๋งค๋ ฅ์ฒ๋ผ ์๋ํ์ต๋๋ค. ๊ทธ๋์ completed == true
๋ฅผ ํ์ธํ๋ ๋์ ์ด์ value.count > MaskedTextFieldDelegate.acceptableValueLength()
์ ์์กดํด์ผ ํฉ๋๋ค. ๋ง์ต๋๊น? ๋๋ ์ฌ๊ธฐ์์ ํ
์คํธํ์ผ๋ฉฐ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํ์ํ ๋ง์คํฌ์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ง์ ํ๊ธฐ๋ฒ์ด ์๋ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ๊ตฌํํด์ผ ํ ๊ธฐ๋ฅ์ ๋๋ค.
์ก์๋ค. ๊ทธ๋์ ๊ธฐ๋ณธ UITextFieldDelegate
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋์์ ์ ์ํ๊ธฐ ์ํด ์ปดํ์ผ๋ฌ๋ ๋ฌธ์ ์์ ์ค์ํ์ ํน์ฑ์ ์์์ผ ํฉ๋๋ค.
์, ์๋ต ๋ถํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ง์ ํ๊ธฐ๋ฒ(์์ ์ด ๋๋ฌด ๋ง์ด ํ์ํ ๊ฒฝ์ฐ)์ ๊ตฌํํ๋ ๋์ ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ๊ตฌํํ๋ฉด ๋ฉ๋๋ค.
๋ค์ ํ ๋ฒ ๊ฐ์ฌํฉ๋๋ค!
@caioremedio ,
๊ต์ฅํฉ๋๋ค. ๋งค๋ ฅ์ฒ๋ผ ์๋ํ์ต๋๋ค. ๊ทธ๋์ ๋์ ์๋ฃ == true์ธ์ง ํ์ธํ๊ณ ์ด์ value.count > MaskedTextFieldDelegate.acceptableValueLength() ์ ์์กดํด์ผ ํฉ๋๋ค. ๋ง์ต๋๊น?
๋ค.
์, ์๋ต ๋ถํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ง์ ํ๊ธฐ๋ฒ(์์ ์ด ๋๋ฌด ๋ง์ด ํ์ํ ๊ฒฝ์ฐ)์ ๊ตฌํํ๋ ๋์ ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ๊ตฌํํ๋ฉด ๋ฉ๋๋ค.
์ฌ์ค ์ฌ๊ธฐ์์ ์ฌ์ฉ์ ์ ์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฐ๋ฆฌ ์ธก์์ ๋ ์ ์ ์์ ์ด ํ์ํฉ๋๋ค.
์ก์๋ค. ๊ทธ๋์ ๊ธฐ๋ณธ UITextFieldDelegate๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
์ด๋ฒ ์ฃผ๋ง Compiler
์
๋ฐ์ดํธ๋ฅผ ๊ธฐ๋ํด ์ฃผ์ญ์์ค.
@caioremedio ,
์ข์ต๋๋ค. ์ด์ ํ์ํ ๋ง์คํฌ๋ ์ฌ์ฉ์ ์ง์ ํ๊ธฐ๋ฒ์ ์ง์ํฉ๋๋ค.
์ต์ 3.4.1
.