수색…


유형 주조

타입 캐스팅은 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 등)으로 작업 할 때 배열에 비해 현저한 성능 향상을 제공합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow