스위프트에 있는 모든 물체와 모든 물체
언제 사용해야 할지 모르겠습니다.AnyObject
할 때 및 할 때Any
스위프트에서
저 같은 경우에는.Dictionary
[끈: ???]
: 될 수 있음Int
,Double
,Float
,String
,Array
,Dictionary
누가 나에게 사이의 차이점을 설명해 줄 수 있습니까?Any
그리고.AnyObject
그리고 내 경우에 어떤 것을 사용해야 할지.
AnyObject
유형 기유표형(준)에만Any
값 유형과 참조 유형 모두에 사용됩니다.
그래서 당신은 가야 합니다.[String: Any]
.
모든 객체 및 모든 객체에 대한 유형 주조
Swift는 특정 유형이 아닌 두 가지 특수 유형을 제공합니다.
Any
함수 유형을 포함하여 모든 유형의 인스턴스를 나타낼 수 있습니다.AnyObject
클래스 유형의 인스턴스를 나타낼 수 있습니다.참고:
사용하다
Any
그리고.AnyObject
사용자가 제공하는 동작과 기능이 명시적으로 필요한 경우에만 사용할 수 있습니다.코드 내에서 작업할 것으로 예상되는 유형은 항상 구체적으로 지정하는 것이 좋습니다.
스위프트 프로그래밍 언어에서: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html #//apple_ref/doc/uid/TP40014097-CH22-ID342
-
또한 Cocoa API로 작업할 때 Array of AnyObject를 수신하는 것이 일반적인데, 이는 Object-C 배열이 유형화되지 않았기 때문입니다.따라서 예상되는 어레이 유형에 맞게 캐스트해야 합니다.
-
편집: (2015년 12월 22일)
마지막 문장에서 이것은 Swift 2.0 및 Xcode 7과 함께 변경되고 있습니다.
Apple은 Objective-C에 'Lightweight' 제네릭을 도입하여 많은 코코아 API가 이미 올바른 유형을 반환합니다.
편집: (2016년 10월 18일)
3 Swift 3.0 기표목-Cid
는 이제 이를 s 가니다져옵로으로 가져옵니다.Any
는 더 이상 이아닌은더상AnyObject
.
를 사용하는지 Any
또는AnyObject
사용 용도에 따라 달라집니다.
코드 된다면, 은 스위프트 의코사드사안용면다된만서합사,니다야용해다을음당만약신은을 사용해야 합니다.Any
당신의 타입 때문에 (Int
,Double
,Float
,String
,Array
,그리고.Dictionary
는 개체가 .는 개체가 아닙니다.
, 이 은 ""-C"로 됩니다.NSDictionary
그러면 당신은 사용해야 합니다.AnyObject
.
이 신이당 때.import Foundation
또는import UIKit
또는import Cocoa
을 배을다음같선수있습니다언으로 할 수 .[String: AnyObject]
하지만 이 경우 스위프트는 당신을 치료하고 있습니다.Int
,Double
,Float
로서의 리터럴.NSNumber
,당신의.String
NSString
,당신의.Array
NSArray
그리고 당신의 사전들이NSDictionary
모든 것이 물체입니다.을 사용한 AnyObject
이 값 을 로 변 수 있 므 으 로 할 환 유 형 ▁NSDictionary
단 하나를 사용하여Any
아닙니다.
Apple의 Swift 문서에 따르면,
- 임의는 함수 유형 및 선택적 유형을 포함하여 모든 유형의 인스턴스를 나타낼 수 있습니다.
- 모든 개체는 모든 클래스 유형의 인스턴스를 나타낼 수 있습니다.
자세한 내용은 블로그를 참조하십시오.
제네릭은 유형이 안전합니다. 즉, 문자열을 제네릭으로 전달하고 정수로 사용하려고 하면 컴파일러가 불만을 제기하고 (좋은) 를 컴파일할 수 없습니다.(이는 Swift가 정적 타이핑을 사용하고 있으며 컴파일러 오류를 제공할 수 있기 때문에 발생합니다.)AnyObject를 사용하는 경우 컴파일러는 이 개체가 String 또는 Integer로 처리될 수 있으며 기본적으로 Integer일 때 String으로 전달된 개체를 사용하려고 하는 것처럼 사용자가 원하는 모든 것을 할 수 있도록 허용합니다(나쁜 경우).(Swift가 동적 타이핑을 사용하고 있으며 런타임 오류만 표시하기 때문에 이 문제가 발생합니다.)
기본적으로 "Any"를 사용해야 하며 좀 더 정확성이 필요한 경우 AnyHashable, AnyObject, AnyClass, Custom과 같은 제한된 유형을 선택할 수 있습니다.유형 등
UIKit 및 Foundation과 같이 Object-C로 작성된 프레임워크에 객체를 샌딩할 때 모든 Object를 사용해야 합니다.
AnyObject는 클래스 유형의 인스턴스를 허용하고 enum, struct 및 선택적 클래스 유형 개체와 같은 유형의 인스턴스는 허용되지 않습니다.
class CustomType {
var instanceArg1: Int
var instanceArg2: String
static var classArg1: Int
}
AnyObject 유형의 특별한 점은 이 유형의 개체가 자동 완성을 통해 모든 @objc 메서드 및 변수에 액세스할 수 있다는 것입니다.UIKit 또는 Foundation을 가져오면 AnyObject 인스턴스 객체는 자동 완성을 통해 모든 Foundation 객체의 모든 변수 및 메서드에 액세스할 수 있습니다.
아래 코드는 지정된 인수가 UITableView가 아닌 String 유형이고 String 유형에 정의된 메서드 테이블View(_:numberOfRowsInSection)가 없기 때문에 먼저 런타임에서 앱을 컴파일하지만 충돌시킵니다.
import UIKit
class CustomType {
func customMethod(arg1: AnyObject) {
let tableView = UITableView()
let numberOfRows = arg1.tableView(tableView, numberOfRowsInSection: 0)
}
}
언급URL : https://stackoverflow.com/questions/25809168/anyobject-and-any-in-swift
'source' 카테고리의 다른 글
Itable 대신 목록을 반환하는 CrudRepository에서 findAll()을 사용하는 방법 (0) | 2023.08.20 |
---|---|
수식을 편집하는 동안 (다른 시트의 셀을) 강조 표시하는 방법은 무엇입니까? (0) | 2023.08.20 |
IP 전화/IPad:화면 너비를 프로그래밍 방식으로 가져오는 방법은 무엇입니까? (0) | 2023.08.20 |
MariaDb 10.6의 NVARCHAR 열에 대한 기본 데이터 정렬 변경 (0) | 2023.08.20 |
ADB 셸 입력 이벤트 (0) | 2023.08.15 |