import type { NobjcObject } from "objc-js";
import type { _NSCoder } from "./NSCoder.js";
import type { _NSCopying } from "./NSCopying.js";
import type { _NSData } from "./NSData.js";
import type { _NSEnumerator } from "./NSEnumerator.js";
import type { _NSFastEnumeration } from "./NSFastEnumeration.js";
import type { _NSIndexSet } from "./NSIndexSet.js";
import type { _NSMutableCopying } from "./NSMutableCopying.js";
import type { _NSObject } from "./NSObject.js";
import type { _NSOrderedCollectionDifference } from "./NSOrderedCollectionDifference.js";
import type { _NSPredicate } from "./NSPredicate.js";
import type { _NSString } from "./NSString.js";
import type { _NSURL } from "./NSURL.js";
import type { NSRange } from "../structs/NSRange.js";
import type { NSBinarySearchingOptions } from "./NSBinarySearchingOptions.js";
import type { NSEnumerationOptions } from "./NSEnumerationOptions.js";
import type { NSKeyValueObservingOptions } from "./NSKeyValueObservingOptions.js";
import type { NSOrderedCollectionDifferenceCalculationOptions } from "./NSOrderedCollectionDifferenceCalculationOptions.js";
import type { NSSortOptions } from "./NSSortOptions.js";
export declare class _NSArray extends _NSObject {
    static alloc(): _NSArray;
    static new(): _NSArray;
    static array(): _NSArray;
    static arrayWithObject$(anObject: NobjcObject): _NSArray;
    static arrayWithObjects$count$(objects: NobjcObject, cnt: number): _NSArray;
    static arrayWithObjects$(firstObj: NobjcObject): _NSArray;
    static arrayWithArray$(array: _NSArray): _NSArray;
    /** Reads array stored in NSPropertyList format from the specified url. */
    static arrayWithContentsOfURL$error$(url: _NSURL, error: NobjcObject | null): _NSArray | null;
    /**
     * These methods are deprecated, and will be marked with API_DEPRECATED in a subsequent release. Use the variants that use errors instead.
     * @deprecated arrayWithContentsOfURL:error:
     */
    static arrayWithContentsOfFile$(path: _NSString): _NSArray | null;
    /** @deprecated arrayWithContentsOfURL:error: */
    static arrayWithContentsOfURL$(url: _NSURL): _NSArray | null;
    objectAtIndex$(index: number): NobjcObject;
    init(): _NSArray;
    initWithObjects$count$(objects: NobjcObject | null, cnt: number): _NSArray;
    initWithCoder$(coder: _NSCoder): _NSArray | null;
    arrayByAddingObject$(anObject: NobjcObject): _NSArray;
    arrayByAddingObjectsFromArray$(otherArray: _NSArray): _NSArray;
    componentsJoinedByString$(separator: _NSString): _NSString;
    containsObject$(anObject: NobjcObject): boolean;
    descriptionWithLocale$(locale: NobjcObject | null): _NSString;
    descriptionWithLocale$indent$(locale: NobjcObject | null, level: number): _NSString;
    firstObjectCommonWithArray$(otherArray: _NSArray): NobjcObject | null;
    getObjects$range$(objects: NobjcObject, range: NSRange): void;
    indexOfObject$(anObject: NobjcObject): number;
    indexOfObject$inRange$(anObject: NobjcObject, range: NSRange): number;
    indexOfObjectIdenticalTo$(anObject: NobjcObject): number;
    indexOfObjectIdenticalTo$inRange$(anObject: NobjcObject, range: NSRange): number;
    isEqualToArray$(otherArray: _NSArray): boolean;
    objectEnumerator(): _NSEnumerator;
    reverseObjectEnumerator(): _NSEnumerator;
    sortedArrayUsingFunction$context$(comparator: NobjcObject | null, context: Uint8Array | null): _NSArray;
    sortedArrayUsingFunction$context$hint$(comparator: NobjcObject | null, context: Uint8Array | null, hint: _NSData | null): _NSArray;
    sortedArrayUsingSelector$(comparator: string): _NSArray;
    subarrayWithRange$(range: NSRange): _NSArray;
    /**
     * Serializes this instance to the specified URL in the NSPropertyList format (using NSPropertyListXMLFormat_v1_0). For other formats use NSPropertyListSerialization directly.
     */
    writeToURL$error$(url: _NSURL, error: NobjcObject | null): boolean;
    makeObjectsPerformSelector$(aSelector: string): void;
    makeObjectsPerformSelector$withObject$(aSelector: string, argument: NobjcObject | null): void;
    objectsAtIndexes$(indexes: _NSIndexSet): _NSArray;
    objectAtIndexedSubscript$(idx: number): NobjcObject;
    enumerateObjectsUsingBlock$(block: (obj: NobjcObject, idx: number, stop: NobjcObject) => void): void;
    enumerateObjectsWithOptions$usingBlock$(opts: NSEnumerationOptions, block: (obj: NobjcObject, idx: number, stop: NobjcObject) => void): void;
    enumerateObjectsAtIndexes$options$usingBlock$(s: _NSIndexSet, opts: NSEnumerationOptions, block: (obj: NobjcObject, idx: number, stop: NobjcObject) => void): void;
    indexOfObjectPassingTest$(predicate: (obj: NobjcObject, idx: number, stop: NobjcObject) => boolean): number;
    indexOfObjectWithOptions$passingTest$(opts: NSEnumerationOptions, predicate: (obj: NobjcObject, idx: number, stop: NobjcObject) => boolean): number;
    indexOfObjectAtIndexes$options$passingTest$(s: _NSIndexSet, opts: NSEnumerationOptions, predicate: (obj: NobjcObject, idx: number, stop: NobjcObject) => boolean): number;
    indexesOfObjectsPassingTest$(predicate: (obj: NobjcObject, idx: number, stop: NobjcObject) => boolean): _NSIndexSet;
    indexesOfObjectsWithOptions$passingTest$(opts: NSEnumerationOptions, predicate: (obj: NobjcObject, idx: number, stop: NobjcObject) => boolean): _NSIndexSet;
    indexesOfObjectsAtIndexes$options$passingTest$(s: _NSIndexSet, opts: NSEnumerationOptions, predicate: (obj: NobjcObject, idx: number, stop: NobjcObject) => boolean): _NSIndexSet;
    sortedArrayUsingComparator$(cmptr: (arg0: NobjcObject, arg1: NobjcObject) => number): _NSArray;
    sortedArrayWithOptions$usingComparator$(opts: NSSortOptions, cmptr: (arg0: NobjcObject, arg1: NobjcObject) => number): _NSArray;
    /** binary search */
    indexOfObject$inSortedRange$options$usingComparator$(obj: NobjcObject, r: NSRange, opts: NSBinarySearchingOptions, cmp: (arg0: NobjcObject, arg1: NobjcObject) => number): number;
    initWithObjects$(firstObj: NobjcObject): _NSArray;
    initWithArray$(array: _NSArray): _NSArray;
    initWithArray$copyItems$(array: _NSArray, flag: boolean): _NSArray;
    /** Reads array stored in NSPropertyList format from the specified url. */
    initWithContentsOfURL$error$(url: _NSURL, error: NobjcObject | null): _NSArray | null;
    differenceFromArray$withOptions$usingEquivalenceTest$(other: _NSArray, options: NSOrderedCollectionDifferenceCalculationOptions, block: (obj1: NobjcObject, obj2: NobjcObject) => boolean): _NSOrderedCollectionDifference;
    differenceFromArray$withOptions$(other: _NSArray, options: NSOrderedCollectionDifferenceCalculationOptions): _NSOrderedCollectionDifference;
    /**
     * Uses isEqual: to determine the difference between the parameter and the receiver
     */
    differenceFromArray$(other: _NSArray): _NSOrderedCollectionDifference;
    arrayByApplyingDifference$(difference: _NSOrderedCollectionDifference): _NSArray | null;
    /**
     * This method is unsafe because it could potentially cause buffer overruns. You should use -getObjects:range: instead.
     * @deprecated Use -getObjects:range: instead
     */
    getObjects$(objects: NobjcObject): void;
    /** @deprecated initWithContentsOfURL:error: */
    initWithContentsOfFile$(path: _NSString): _NSArray | null;
    /** @deprecated initWithContentsOfURL:error: */
    initWithContentsOfURL$(url: _NSURL): _NSArray | null;
    /** @deprecated writeToURL:error: */
    writeToFile$atomically$(path: _NSString, useAuxiliaryFile: boolean): boolean;
    /** @deprecated writeToURL:error: */
    writeToURL$atomically$(url: _NSURL, atomically: boolean): boolean;
    pathsMatchingExtensions$(filterTypes: _NSArray): _NSArray;
    /** Invoke -setValue:forKey: on each of the receiver's elements. */
    setValue$forKey$(value: NobjcObject | null, key: _NSString): void;
    /**
     * Register or deregister as an observer of the values at a key path relative to each indexed element of the array. The options determine what is included in observer notifications and when they're sent, as described above, and the context is passed in observer notifications as described above. These are not merely convenience methods; invoking them is potentially much faster than repeatedly invoking NSObject(NSKeyValueObserverRegistration) methods. You should use -removeObserver:fromObjectsAtIndexes:forKeyPath:context: instead of -removeObserver:fromObjectsAtIndexes:forKeyPath: whenever possible for the same reason described in the NSObject(NSKeyValueObserverRegistration) comment.
     */
    addObserver$toObjectsAtIndexes$forKeyPath$options$context$(observer: _NSObject, indexes: _NSIndexSet, keyPath: _NSString, options: NSKeyValueObservingOptions, context: Uint8Array | null): void;
    removeObserver$fromObjectsAtIndexes$forKeyPath$context$(observer: _NSObject, indexes: _NSIndexSet, keyPath: _NSString, context: Uint8Array | null): void;
    removeObserver$fromObjectsAtIndexes$forKeyPath$(observer: _NSObject, indexes: _NSIndexSet, keyPath: _NSString): void;
    /**
     * NSArrays are not observable, so these methods raise exceptions when invoked on NSArrays. Instead of observing an array, observe the ordered to-many relationship for which the array is the collection of related objects.
     */
    addObserver$forKeyPath$options$context$(observer: _NSObject, keyPath: _NSString, options: NSKeyValueObservingOptions, context: Uint8Array | null): void;
    removeObserver$forKeyPath$context$(observer: _NSObject, keyPath: _NSString, context: Uint8Array | null): void;
    removeObserver$forKeyPath$(observer: _NSObject, keyPath: _NSString): void;
    /** returns a new array by sorting the objects of the receiver */
    sortedArrayUsingDescriptors$(sortDescriptors: _NSArray): _NSArray;
    /** evaluate a predicate against an array of objects and return a filtered array */
    filteredArrayUsingPredicate$(predicate: _NSPredicate): _NSArray;
    count(): number;
    description(): _NSString;
    firstObject(): NobjcObject | null;
    lastObject(): NobjcObject | null;
    sortedArrayHint(): _NSData;
}
export interface _NSArray extends _NSCopying, _NSMutableCopying, _NSFastEnumeration {
}
