array.firstIndex(of : target)
let filteredArray = array.filter {$0 == target}
let filteredArray2 = array.filter {$0 % 2 == 0} // 짝수만 출력
array = [1,2,3,4,5]
let length = array.count // 5
let str "abc"
let char = str[0] // 에러
let index = str.index(str.startIndex, offsetBy:0)
let char = str[index] // "a"
여기서 str.startIndex도 마찬가지로 String.Index 타입이다. 물론 startIndex이니깐 0으로 알 수 있지만, Type을 정확히 알고 사용하는것이 중요하다.
str.endIndex도 있는데, endIndex면 str의 endIndex는 2? 아니다. 3이다. 따라서 str[str.endIndex]를 사용하면 Segmentation fault가 뜬다.
그러면 str[str.endIndex-1]은 될까? 아니다.안되기 때문에 str.index() 함수가 있는거다. 마찬가지로 String.Index 타입을 int로 뺼 수 없기 때문이다.
만약에 str에 특정 부분을 바꾸고 싶다면
str.replaceSubrange(str.startIndex..<endindex,with:String(repeating:"*",count: count-4))
str.replaceSubrange(range,with : string)
String(repeating:"target", count: count)
let number = [0,1,2,3,4,5,6,7,8,9]
let arr = number.filter{!numbers.contains($0)}
let sum = arr.reduce(0,+)
// str.index의 새로운 방식
// offset 말고 before을 사용할 수 있다.
let previousIndex = s.index(before: middleIndex)
// String 의 특정 범위를 출력하는 방법.
// 마찬가지로 범위 Range를 이용
// 나는 이걸 몰라서 두 Character를 String으로 typecasting하고 다시 + 로 합혔다.
return String(s[previousIndex...middleIndex])