여기서 중요한 문제는 배열이 모든 루프 반복에서 새로 만들어지고 루프 반복마다 레이블이 설정된다는 것입니다. 즉, 배열에는 해당 반복에서 만든 요소 만 포함되고 이후에는 새 배열로 재설정되고 새로운 요소가 추가됩니다. 배열은 처음 시작할 때 한 번만 초기화해야하고 루프에서 반복적으로 요소를 추가 한 다음 끝에 한 번 레이블에 넣어야합니다.
@IBAction func generateBtn(sender: UIButton) {
guard let startText = strtNum.text, let start = UInt32(startText),
let endText = endNum.text, let end = UInt32(endText),
let ttlText = amtNums.text, let ttlNums = UInt32(ttlText) else {
//one of these is nil, handle it gracefully here
return
}
let randomGenerator = RandomNum()
var h = [String]()
h.reserveCapacity(ttlNums)
for _ in 0..<ttlNums {
let randomNum = randomGenerator.rndNumGen(start, end: end)
h.append(String(RandomNum))
}
let display = h.joinWithSeparator(", ")
winningNums.text = display
print(display)
}
나는 스위프트 모범 사례와 규칙에 맞춰이 코드를 가지고 몇 가지 다른 변경 한 :
- 이 기 해제를 강요하지 마십시오.
if let
또는 guard let
바인딩을 사용하여 nil 값을 안전하게 처리하십시오.
- 변수에 의미있는 이름을 지정하십시오. 특정 경우를 제외하고는 단일 문자 이름을 사용하지 마십시오.
- 함수/메서드 이름 및 진행 대괄호 옆에 공백을 넣지 마십시오.
- 알려진 범위에서 반복 루프를 사용하지 마십시오. 대신
for in
루프를 사용하십시오.
- t3xtspk에 타이핑하지 마십시오. 틴에이저가 쓴 것처럼 보입니다. 자동 완성 기능으로 단어를 완성 할 수 있으므로 어쨌든 타이핑이 거의 끝나지 않습니다. 쉽게 읽고 읽을 수있게하십시오.
난 당신이 몇 가지 변경을 직접 만들 제안 :
- 이
generateBtn
이름을 바꿉니다. 기능/방법 DO는 행동입니다. 이름은 동사 또는 동사로 지정해야합니다. 아마도 displayRandomArray
과 같은 것을 시도해보십시오.
- 무작위 배열 생성을 고유 한 방법으로 리펙터링합니다.
- 이름 바꾸기
RandomNum
. 외견 상 숫자가 아닙니다. 난수 발전기입니다. 아마도 시도하십시오 RandomNumberGenerator
- 이름 바꾸기
h
.
- 은
.text
이 전무, 또는 그것이 UINT32에서
(따라서 실패하고
nil
를 반환 할UInt32
초기화를 일으키는)가 아닌 문자열을 포함 할 때 무슨 일이 일어날 때 무슨 일을 처리하는 코드를 추가' while body는 항상 새로운 빈 변수'h'를 생성합니다. 이것은 의도 된 것입니까? – vadian