ActionScript 3
유형
수색…
유형 주조
타입 캐스팅은 as
연산자 as
수행됩니다 :
var chair:Chair = furniture as Chair;
또는 Type()
값을 래핑하면 다음과 같습니다.
var chair:Chair = Chair(furniture);
캐스트가 as
실패했을 경우, 그 캐스트의 결과는 null
됩니다. Type()
에서 랩핑하여 Type()
실패하면 TypeError
가 발생합니다.
함수 유형
함수의 유형은 Function
.
function example():void { }
trace(example is Function); // true
Function
유형의 다른 변수에 의해 참조 될 수 있습니다.
var ref:Function = example;
ref(); // ref.call(), ref.apply(), etc.
그리고 그것들은 타입이 Function
인 인자에 대한 인자로 전달 될 수 있습니다 :
function test(callback:Function):void {
callback();
}
test(function() {
trace('It works!');
}); // Output: It works!
클래스 유형
클래스 선언에 대한 참조가 입력됩니다. Class
:
var spriteClass:Class = Sprite;
Class
를 입력 한 변수를 사용하여 해당 클래스의 인스턴스를 인스턴스화 할 수 있습니다.
var sprite:Sprite = new spriteClass();
이는 Class
유형의 인수를 제공된 클래스의 인스턴스 및 인스턴스로 전달하는 데 유용 할 수 있습니다.
function create(type:Class, x:int, y:int):* {
var thing:* = new type();
thing.x = x;
thing.y = y;
return thing;
}
var sprite:Sprite = create(Sprite, 100, 100);
주석 달기 유형
컴파일러에게 값의 유형을 주석으로 표시 할 수 있습니다 :Type
:
var value:int = 10; // A property "value" of type "int".
함수 매개 변수 및 반환 유형은 주석을 달 수도 있습니다.
// This function accepts two ints and returns an int.
function sum(a:int, b:int):int {
return a + b;
}
일치하지 않는 형식으로 값을 할당하려고하면 TypeError
가 발생합니다.
var sprite:Sprite = 10; // 10 is not a Sprite.
유형 확인
is
연산자를 사용하여 값이 특정 유형인지 여부를 확인할 수 있습니다.
var sprite:Sprite = new Sprite();
trace(sprite is Sprite); // true
trace(sprite is DisplayObject); // true, Sprite inherits DisplayObject
trace(sprite is IBitmapDrawable); // true, DisplayObject implements IBitmapDrawable
trace(sprite is Number); // false
trace(sprite is Bitmap); // false, Bitmap inherits DisplayObject
// but is not inherited by Sprite.
도있다 instanceof
에 거의 동일한 작동 연산자 (사용되지 않음) is
그것을 반환하는 것을 제외하고 false
구현 된 인터페이스와 INT / UINT 유형을 검사 할 때입니다.
as
연산자는 is
연산자와 마찬가지로 사용할 수 있습니다. 이것은 명시 적 객체 유형의 모든 가능한 속성 목록을 제공하는 FlashDevelop와 같은 스마트 IDE를 사용하는 경우 특히 유용합니다. 예:
for (var i:int = 0; i < a.length; i++){
var d:DisplayObject = a[i] as DisplayObject;
if (!d) continue;
d.//get hints here
stage.addChild(d);
}
와 같은 효과를 얻으려면 is
당신이 (sligthly 덜 편리) 작성합니다 :
for (var i:int = 0; i < a.length; i++){
if (a[i] is DisplayObject != true) continue;
var d:DisplayObject = a[i] as DisplayObject;
stage.addChild(d);
}
연산자 as
검사 할 때 주어진 값이 지정된 유형으로 주먹으로 변환 된 다음 false가 아닌 경우 해당 연산의 결과가 검사되므로 가능한 false / NaN 값과 함께 사용할 때주의해야합니다.
if(false as Boolean) trace("This will not be executed");
if(false as Boolean != null) trace("But this will be");
아래 표는 유형 연산자의 결과와 함께 몇 가지 기본 값과 유형을 보여줍니다. 녹색 셀은 true, 빨간색은 false, grey는 컴파일 / 런타임 오류를 발생시킵니다.
형식화 된 배열
불행하게도 ActionScript 3에는 제네릭 개념이 없으므로 형식화 된 배열을 Array<T>
로 정의 할 수있는 방법이 없습니다. 그러나 Vector.<T>
를 인스턴스화 할 때 구체적인 클래스에 대한 참조를 제공해야한다는 점을 제외하면 유사한 방식으로 작동하는 특수 클래스 Vector.<T>
가 있습니다. 즉, Vector.<T>
유형 위에 추상화를 작성하는 방법이 없습니다 (예 : 확장 및 새 기능 추가). 이는 큰 단점입니다.
좀 더 간단한 방법은 자동으로 정의하는 모든 클래스가 Vector.<NameOfYourClass>
라는 동반 클래스를 갖는 Vector.<NameOfYourClass>
.
그렇다면, 기존 어레이에 비해 Vector.<T>
유형에는 여전히 큰 이점이 있습니다.
-
Vector.<T>
와 Array 1을 함께 사용하면 성능이 향상됩니다. - 비 -T 값을 컬렉션에 삽입하려고하면 컴파일 유형의
TypeError
수신됩니다. - IDE는
Vector.<T>
인스턴스 내부의 객체에 유용한 유형 힌팅 정보를 제공합니다.
Vector.<T>
만들기 예제 Vector.<T>
:
var strings:Vector.<String> = new Vector.<String>(); // or
var numbers:Vector.<Number> = new <Number>[];
1 벡터는 실제로 원시 타입 ( String
, int
, uint
, Number
등)으로 작업 할 때 배열에 비해 현저한 성능 향상을 제공합니다.