[ios] 신속한 사전 키 배열

신속하게 사전의 키에서 문자열로 배열을 채우려 고합니다.

var componentArray: [String]

let dict = NSDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("Components", ofType: "plist")!)
componentArray = dict.allKeys

‘AnyObject’가 string과 동일하지 않은 오류를 리턴합니다.

또한 시도

componentArray = dict.allKeys as String 

get : ‘String’은 [String] (으)로 변환 할 수 없습니다



답변

스위프트 3 & 스위프트 4

componentArray = Array(dict.keys) // for Dictionary

componentArray = dict.allKeys // for NSDictionary


답변

스위프트 3 Dictionary에는 keys속성이 있습니다. keys다음과 같은 선언이 있습니다.

var keys: LazyMapCollection<Dictionary<Key, Value>, Key> { get }

사전의 키만 포함하는 컬렉션입니다.

참고 LazyMapCollection즉 쉽게 매핑 할 수 있습니다 ArrayArrayinit(_:)이니셜.


에서 NSDictionary[String]

다음 iOS AppDelegate클래스 스 니펫은의 속성을 [String]사용하여 문자열 배열 ( ) 을 얻는 방법을 보여줍니다 .keysNSDictionary

여기에 이미지 설명을 입력하십시오

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let string = Bundle.main.path(forResource: "Components", ofType: "plist")!
    if let dict = NSDictionary(contentsOfFile: string) as? [String : Int] {
        let lazyMapCollection = dict.keys

        let componentArray = Array(lazyMapCollection)
        print(componentArray)
        // prints: ["Car", "Boat"]
    }

    return true
}

에서 [String: Int][String]

보다 일반적인 방법으로 다음 놀이터 코드는 문자열 키와 정수 값 ( )이 있는 사전에서 속성을 [String]사용하여 문자열 배열 ( ) 을 얻는 방법을 보여줍니다 .keys[String: Int]

let dictionary = ["Gabrielle": 49, "Bree": 32, "Susan": 12, "Lynette": 7]
let lazyMapCollection = dictionary.keys

let stringArray = Array(lazyMapCollection)
print(stringArray)
// prints: ["Bree", "Susan", "Lynette", "Gabrielle"]

에서 [Int: String][String]

다음 놀이터 코드는 정수 키와 문자열 값 ( )이 있는 사전에서 속성을 [String]사용하여 문자열 배열 ( ) 을 얻는 방법을 보여줍니다 .keys[Int: String]

let dictionary = [49: "Gabrielle", 32: "Bree", 12: "Susan", 7: "Lynette"]
let lazyMapCollection = dictionary.keys

let stringArray = Array(lazyMapCollection.map { String($0) })
// let stringArray = Array(lazyMapCollection).map { String($0) } // also works
print(stringArray)
// prints: ["32", "12", "7", "49"]


답변

Swift의 사전 키 배열

componentArray = [String] (dict.keys)


답변

dict.allKeys문자열이 아닙니다. 그것은 [String]오류 메시지가 알려주는 것과 정확히 같습니다 (물론 키 모두 문자열 이라고 가정하면 정확히 말할 때 주장하는 것입니다).

따라서 componentArrayas 로 입력하는 것으로 시작 [AnyObject]하십시오. 이것이 Cocoa API에서 입력되는 방식이기 때문입니다. 또는 dict.allKeys캐스트하는 [String]경우을 입력하십시오 componentArray.


답변

extension Array {
    public func toDictionary<Key: Hashable>(with selectKey: (Element) -> Key) -> [Key:Element] {
        var dict = [Key:Element]()
        for element in self {
            dict[selectKey(element)] = element
        }
        return dict
    }
}


답변

NSDictionaryClass (pass by reference)
Dictionary is Structure (pass by value )입니다.
NSDictionary는 클래스 유형입니다
사전은 키와 가치의 구조입니다
====== NSDictionary의 배열 ======

NSDictionary에는 allKeys가 있으며 allValues[Any] 유형의 특성을 가져옵니다 .NSDictionary는 allkeys 및 allvalues에 대한 [Any] 속성을 갖습니다.

  let objesctNSDictionary =
    NSDictionary.init(dictionary: ["BR": "Brazil", "GH": "Ghana", "JP": "Japan"])
            let objectArrayOfAllKeys:Array = objesctNSDictionary.allKeys
            let objectArrayOfAllValues:Array = objesctNSDictionary.allValues
            print(objectArrayOfAllKeys)
            print(objectArrayOfAllValues)

====== 사전에서 배열 ======

Dictionary의 속성에 대한 Apple 참조 .
여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

let objectDictionary:Dictionary =
            ["BR": "Brazil", "GH": "Ghana", "JP": "Japan"]
    let objectArrayOfAllKeys:Array = Array(objectDictionary.keys)
    let objectArrayOfAllValues:Array = Array(objectDictionary.values)
    print(objectArrayOfAllKeys)
    print(objectArrayOfAllValues)


답변

dict.keys.sorted() 

[String] https://developer.apple.com/documentation/swift/array/2945003-sorted 를 제공합니다.