[Swift🦩] #3文字列と文字、#4セットタイプ


3.文字列と文字


String, Character
// Chararcter 배열 -> String
let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]
let catString = String(catCharacters)
ベースのNSStringと接続されているので、NSStringメソッドをブリッジして使用することもできます.

1.文字列文字、isEmpty

let s: String = "문자열"
let c: Character = "C"
let special = "특수문자\n\0\t\\\""
let unicode = "\u{1F496}"

// 특수문자를 그냥 출력하고 싶다면?
let str = #"""
문자열\n문자열 -> 문자 그대로 나옴.
문자열\#n문자열 -> 개행으로 나옴.
\(str) -> 문자 그대로 나옴
\#(str) -> str 변수에 할당된 것이 나옴.
"""#

let s1 = ""
let s2 = String()
print( s1.isEmpty && s2.isEmpty ) // true

var num = 132323
print("변수 \(num) 출력 가능")

2.演算

"문자열" + "문자열"

var s = "문자열"
s += "연산"

3. value type


文字列は値タイプであるため、パラメータとして関数に渡されると、新しい変数に割り当てられたときにコピーされます.

4.は文

let s = "Character"

// 아래 3가지는 모두 같은 문자열.
for c in s:
    print(c)    

for i in 0..<s.count:
    print(s[i])

for i in s.indices:
    print(s[i])

5. Index, insert, remove ⭐️⭐️


String.インデックスタイプ(index type)を使用して、文字列内の特定のインデックスの文字にアクセスします.
let greeting = "Guten Tag!"
greeting[greeting.startIndex]
// G
greeting[greeting.index(before: greeting.endIndex)]
// ! - endIndex 는 우리가 생각하는 end index + 1 이라 접근할 수 없다.
greeting[greeting.index(after: greeting.startIndex)]
// u
let index = greeting.index(greeting.startIndex, offsetBy: 7)
greeting[index]
// a
Insert
greeting.insert("⭐️", at: greeting.endIndex) 
// "Guten Tag!⭐️"

// 문자 하나가 아니라 문자열을 추가하려면 contentsOf 사용.
welcome.insert(contentsOf: "🧽🪣", at: welcome.index(before: welcome.endIndex)) 
// "Guten Tag!🧽🪣⭐️"
Remove
gretting.remove(at: greeting.index(before: greeting.endIndex))

let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
5
welcome.removeSubrange(range)

6. Substring ⭐️


SWIFTでは,prefixのような方法で得られるのはStringではなく,タスクの実行中に短時間で使用されるSubstringである.結果を保存する場合は、SubstringをStringに変換します.StringとSubStringはいずれもStringプロトコルに従うので、SubstringではStringのほとんどの方法を使用することもできます.
let snsd = "지금은 소녀시대, 앞으로도 소녀시대, 영원히 소녀시대."
let index = snsd.firstIndex(of: ",") ?? snsd.endIndex
let now = snsd[0..<index] // 지금은 소녀시대

let now = String(now) // string 으로 쓰려면 변환 필수.
どうしたんですか.メモリを無駄にしないように!次の図に示すように、元のStringのメモリを共有して使用し、文字列を単独で使用すると、新しい場所にコピーして保存します.

7.比較(=!=hasPrefix hassSuffix)

let s1 = "Girls' Generation"
let s2 = "Girls' Generation TTS"
let s3 = "Girls' Generation Oh!GG"

s1 != s2 // true

// hasPrefix, hasSuffix 는 보통 이렇게 단독으로 사용하기 보다는,
// 문자 배열에서 for 문으로 각 문자열에 prefix, suffix 가 있는지 확인한다.
s1.hasPrefix("Girls' Generation") // true
s3.hasSuffix("TTS") // false
  • UTF-8、UTF-16、Unicode Scaleで表します.
  • 4.お気に入りタイプ

  • アレイ(Array):集合値で、順番に並べられます.
  • セット(Set):重複値なし、順序なしのセットタイプ.
  • ディレクトリ:キー値ペア順のセットタイプ.
  • var arr: [String] = ["a", "b", "c"] // 변경 가능 - 아이템 추가, 삭제, 변경 가능.
    let dict: [Int: String] = [1 : "one", 2 : "two", 3 : "three"] // 변경 불가능.

    1. Array ⭐️


    NSArrayとブリッジできます.
    // 아래 3가지는 모두 같은 결과.
    var arr1: [Int] = []
    var arr2: [Int] = [Int]()
    var arr3: Array<Int> = Array<Int>()
    
    var d1 = Array(repeating: 0.0, count: 3) // 기본 값을 반복하여 배열 생성 가능.
    var d2 = [1.3, 2.312, 1.2]
    
    print(d1 + d2) // 더하기 가능. [0.0, 0.0, 0.0, 1.3, 2.312, 1.2]
    
    // 문자열과 같이 isEmpty, count 변수 있음.
    arr1.isEmpty // true
    d1.count // 3
    
    var shoppingList = ["iPhone", "iPad"]
    shoppingList.append("MacBook")
    shoppingList += ["iMac", "MacPro"]
    print(shoppingList[4]) // subscript 구문으로 get, set 모두 가능.
    shoppingList[2] = "iPad Pro"
    shoppingList.insert("Lightening-C cable", at: 1) // insert
    shoppingList.remove(at: 3)
    shoppingList.removeLast()
    
    for element in shoppingList {
        // 배열 순회 가능.
    }
    
    for (index, value) in enumarted(shoppingList) {
        // index, 배열 요소 쌍으로 순회 가능.
    }

    2. Set


    NSSetに接続します.
  • セットに値を格納するには、値のタイプがhashableである必要があります.(ハッシュ値が同じ場合は同じ値、ハッシュ値が異なる場合はその値も異なる)
  • var onlyOne = Set<Character>()
    var onlyOne: Set<Character> = ["b", "d", "z"]
    onlyOne.insert("a")
    
    onlyOne.<isEmpty // false
    onlyOne.remove("z")
    onlyOne.contains("d")
    
    // 순서가 없어서 어떻게 나올지 모르기 때문에, 정해진 순서로 사용하고 싶으면
    for char in onlyOne.sorted() {
        // sorted 를 사용하여 순회하자.
    }

    しゅうごうえんざん

    a.intersection(b) // a, b의 교집합 A n B
    a.symmetricDifference(b) // (A U B) - (A n B)
    a.union(b) // 합집합 A U B
    a.subtracting(b) // 차집합 A - B
    
    a.isSubset(of: b) // a 가 b 의 부분집합인가?
    a.isSuperset(of: b) // b 가 a의 부분집합인가?
    a.isStrictSubset(of: b) //  a 가 b의 진부분집합인가?
    a.isStrictSuperSet(of: b) // b 가 a의 진부분집합인가?
    a.isDisjoint(with: b) // a 와 b 가 서로소집합인가?

    3. Dictionary ⭐️


    ≪特定のタイプのキー|Key Specific Type|ldap≫:特定のタイプの値
    setがhashableであるようにdictのキー値もhashableであるべきである.
    キーを使用して値を検索する場合は、ディクシャナを使用します.
    var dict = Dictionary<Key, Value>()
    var dict = [Key: Value]()
    
    var airports: [String: String] = [<"YYZ": "Toronto Pearson", "DUB": "Dublin", "ICN": "Incheon", "CJU": "Jeju"]
    
    airports.isEmpty // false
    airports["LHR"] = "London" // 이미 있는 키에 값을 할당하거나 새로운 키에 값을 넣을 수 있음.
    
    
    // func updateValue(newValue, forKey: key) -> oldValue?
    // 만약 딕셔너리에 키가 없으면 nil을 반환.
    if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
        print("The old value for DUB was \(oldValue).")
    }
    
    airports["CJU"] = nil // 딕셔너리 내의 값을 삭제.
    airports.removeValue(forKey: "DUB")
    
    for (airportCode, airportName) in airports {
        // key, value 로 순회 가능.
    }
    
    
    // key 나 value 만 따로 뽑아서 배열로 사용할 수 있다.
    let airportCodes = [String](airports.keys)
    let airportNames = [String](airports.values)
    実際に開発した時はあまり使ったことがありませんでしたが、cotefulの時はゆったりとした感じでした.