Day 37 - (enumerated, replacingOccurences,firstIndexOf, joined, didSet)

sun02·2021년 9월 27일
0

100 days of Swift 

목록 보기
30/40

func loadLevel() {
	var clueString = ""
    var solutionString = ""
    var letterBits = [String]()
    
    if let levelFileURL = Bundle.main.url(forResource: "level\(level)". withExtension: "txt") {
    	if let levelContents = try? String(contentsOf: levelFileURL) {
        	var lines = levelContents.components(separatedBy: "\n")
            lines.shuffle()
            
            for (index, line) in lines.enumerated() {
            	let parts = line.components(seperatedBy: ": ")
                let answer = parts[0]
                let clue = parts[1]
                
                clueString += "\(index + 1). \(clues)\n"
                
                let solutionWord = answer.replacingOcurrences(of: "|", with: "")
                solutionString += "\(solutionWord.count) letters\n"
                solutions.append(solutionWord)
                
                let bits = answer.components(seperatedBy: "|")
                letterBits += bits
                
            }
        }
    }
}

enumerated()

: (n,x) 쌍으로 된 시퀀스를 반환한다. n은 0에서 시작하는 연속적인 정수를 나타내고, x는 시퀀스의 element를 나타낸다.

for (n,c) in "Swift".enumerate() {
	print("\(n): \(c)")
}

// prints
// "0: S"
// "1: w"
// "2: i"
// "3: f"
// "4: t"

enumerated() - Apple.document

replacingOcurrences(of: "|", with: "")

: 매개변수 of의 모든 인스턴스가 매개변수 with로 바뀐다.
ex) "HA|UNT|ED" => "HAUNTED"


cluesLabel.text = cluesString.trimmingCharacters(in: .whitespacesAndNewlines)
answersLabel.text = solutionString.trimmingCharacters(in: .whitespacesAndNewlines)

letterBits.shuffle()

if letterBits.count == letterButtons.count {
	for i in 0..<letterButtons.count {
    	letterButtons[i].setTitle(letterBits[i], for: .normal)
    }
}

trimmingCharacters(in:)

: 문자열의 시작과 끝에서 지정한 모든 문자를 제거한다.

  • .whitespacesAndNewlines : 공백, 탭, 줄 바꿈 등을 제거함

@objc func submitTapped(_ sender: UIButton) {
	guard let answerText = currentAnswer.text else { return }
    
    if let solutionPosition = solutions.firstIndex(of: answerText) {
    	activatedButtons.removeAll()
        
        var splitAnswers = answersLabel.text?.components(seperatedBy: "\n")
        splitAnswers?[solutionPosition] = answerText
        answertsLabel.text = splitAnswers?.joined(seprator: "\n")
        
        currentAnswer.text = ""
        score += 1
        
        if score % 7 == 0 {
        	let ac = UIAlertController(title: "Well done!", message: "Are you ready for the next level?", preferredStyle: .alert)
            ac.addAction(UIAlertAction(title: "Let's go!", style: .default, handler: levelUp))
            present(ac, animated: true)
        }
    }
}

firstIndex(of: )

: 집합 안에서 of 매개변수의 요소와 일치하는 값의 위치를 알려줌


var students = ["Ben", "Ivy", "Jordel", "Maxime"]
if let i = students.firstIndex(of: "Maxime") {
	students[i] = "Max"
}

print(students)
// prints ["Ben", "Ivy", "Jordel", "max"]

firstIndext(of:) - Apple.document

joined(seprator: )

: 해당 시퀀스의 연결된 요소를 반환하고 각 요소 사이에 지정된 구분 기호를 삽입한다.


let nestedNumbers = [[1,2,3], [4,5,6], [7,8,9]]
let joined = nestedNumbers.joined(seperator: [-1,-2])

print(Array(joined))

//prints "[1,2,3,-1,-2,4,5,6,-1,-2,7,8,9]"

joined(seprator: )- Apple.document

didSet

: 프로퍼티가 변경될 떄마다 코드를 실행시키는 프로퍼티 옵저버이다.

var score = 0 {
	didSet {
    	scoreLabel.text = "Score: \(score)"
    }
}
  • score값이 변경되면 scoreLabel의 텍스트를 "Score: (score)" 로 변경시킨다.

0개의 댓글