D言語からObjective-CとCocoaAPIを使いたい
string 関係 の API を分離してみました
サンプルコード
Powered by Prism
cocoa/strings.d
/**
* cocoa/strings.d Version 0.0.3
*/
module cocoa.strings;
import core.attribute : optional, selector;
import std.conv : to;
extern (Objective-C)
extern class NSObject {
static NSObject alloc() @selector("alloc");
NSObject init() @selector("init");
SEL perform(SEL) @selector("performSelector:");
void release() @selector("release");
}
extern (Objective-C)
extern class NSString : NSObject {
override static NSString alloc() @selector("alloc");
override NSString init() @selector("init");
NSString initWithBytes(
const(ubyte)* bytes,
NSUInteger length,
NSStringEncoding encoding
) @selector("initWithBytes:length:encoding:");
NSString init(char*) @selector("initWithUTF8String:"); //
NSString initWith(char*) @selector("initWithUTF8String:"); //
NSString initWith(NSString) @selector("initWithString:");
NSString init(NSString) @selector("initWithString:");
char* UTF8String() @selector("UTF8String");
override void release() @selector("release");
void draw(NSPoint, NSDictionary) @selector("drawAtPoint:withAttributes:");
void drawAtPoint(NSPoint, NSDictionary)
@selector("drawAtPoint:withAttributes:");
double doubleValue(NSString) @selector("doubleValue:");
int intValue(NSString) @selector("intValue:");
int length() @selector("length");
NSRange rangeOfString(NSString) @selector("rangeOfString:");
NSString substr(NSRange) @selector("substringWithRange:");
}
NSString substr(NSString str, int a, int b) {
return str.substr(NSRange(a, b));
}
NSString toNSString(string str) {
return NSString.alloc.initWithBytes(
cast(immutable(ubyte)*) str.ptr,
str.length,
NSStringEncoding.NSUTF8StringEncoding
);
}
enum NSStringEncoding : NSInteger { NSUTF8StringEncoding = 4 }
NSString toNs(string str) { return toNSString(str); }
NSString toNs(char* cstr) { return NSString.alloc.init(cstr); }
string toDs(NSString str) { return str.toCs.to!string; }
string toDs(char* str) { return str.to!string; }
char* toCs(NSString str) { return str.UTF8String; }
// char* toCs(string str) { return cast(char*) str; } //
char* toCs(string str) { return str.toNs.toCs; } //
NSString strCopy(NSString str) { return NSString.alloc.init(str); }
extern (C) void NSLog(NSString, ...);
struct objc_selector;
alias SEL = objc_selector*;
extern (C) SEL sel_registerName(char* str); //
alias NSUInteger = size_t; // ulong = 8 Byte
alias NSInteger = ptrdiff_t; // long = 8 Byte
struct CGColor;
alias CGColorRef = CGColor*;
alias CGFloat = double; // 8bit
struct NSPoint {
CGFloat x;
CGFloat y;
}
struct NSRange {
NSUInteger location;
NSUInteger length;
}
pragma(inline, true) NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
NSRange r;
r.location = loc;
r.length = len;
return r;
}
/* NSDictionary */
extern (Objective-C)
extern class NSDictionary : NSObject {
static NSDictionary dictionary() @selector("dictionary");
static NSDictionary dic(NSArray, NSArray)
@selector("dictionaryWithObject:forKeys:");
NSString strForKey(NSString) @selector("objectForKey:");
NSString key(NSString) @selector("objectForKey:");
NSMutableDictionary copy() @selector("mutableCopy");
NSUInteger count() @selector("count");
}
extern (Objective-C)
extern class NSMutableDictionary : NSDictionary {
override static NSMutableDictionary dictionary() @selector("dictionary");
NSMutableDictionary setObjKey(NSString, NSString) @selector("setObject:forKey:");
NSString objKey(NSString) @selector("objectForKey:"); // keyの要素の取得
void removeKey(NSString) @selector("removeObjectForKey:"); // keyの要素を削除
void removeAll() @selector("removeAllObjects"); // 全要素を削除
NSDictionary copy() @selector("copy");
}
/* NSArray */
extern (Objective-C)
extern class NSArray : NSObject {
static NSArray array() @selector("array");
static NSArray array(NSArray) @selector("arrayWithArray:");
static NSArray array(NSString) @selector("arrayWithObject:");
static NSArray array(NSString, NSUInteger) @selector("arrayWithObjects:count:");
override NSArray init() @selector("init");
NSArray init(NSArray) @selector("initWithArray:");
NSArray init(NSArray, bool) @selector("initWithArray:copyItem:");
NSInteger count() @selector("count");
NSString atIndex(NSUInteger) @selector("objectAtIndex:");
NSString strAtIndex(NSUInteger) @selector("objectAtIndex:");
NSDictionary dicAtIndex(NSUInteger) @selector("objectAtIndex:");
NSArray arrayAtIndex(NSUInteger) @selector("objectAtIndex:");
NSMutableArray copy() @selector("mutableCopy");
NSMutableArray muCopy() @selector("mutableCopy");
NSNumber objectAtIndex(NSUInteger) @selector("objectAtIndex:");
}
extern (Objective-C)
extern class NSMutableArray : NSArray {
override static NSMutableArray alloc() @selector("alloc");
override static NSMutableArray array() @selector("array");
override NSMutableArray init() @selector("init");
void addObject(NSNumber) @selector("addObject:");
void addArray(NSArray) @selector("addObjectsFromArray:");
void add(NSMutableArray) @selector("addObjectsFromArray:");
void add(NSString) @selector("addObject:");
void insert(NSObject, NSUInteger) @selector("insertObject:atIndex:");
NSArray copy() @selector("copy");
override NSNumber objectAtIndex(NSUInteger) @selector("objectAtIndex:");
}
extern (Objective-C)
extern class NSURL : NSObject {
static NSURL url(NSString) @selector("URLWithString:"); // NSString -> NSURL
NSURL init(NSString) @selector("initWithString:");
NSURL url(string s) { return NSURL.url(s.toNs); }
NSString abString() @selector("absoluteString"); // NSURL -> NSString
}
extern (Objective-C)
extern class NSError : NSObject {}
extern (Objective-C)
extern class NSValue : NSObject {}
/* NSNumber */
extern (Objective-C)
extern class NSNumber : NSValue {
override static NSNumber alloc() @selector("alloc");
NSNumber initWithInt(int) @selector("initWithInt:");
NSNumber init(int) @selector("initWithInt:");
int intValue() @selector("intValue");
int toInt() @selector("intValue");
uint unsignedIntValue() @selector("unsignedIntValue");
uint toUint() @selector("unsignedIntValue");
long longValue() @selector("longValue");
long toLong() @selector("longValue");
ulong unsignedLongValue() @selector("unsignedLongValue");
ulong toUlong() @selector("unsignedLongValue");
NSString stringValue() @selector("stringValue");
}
string toStr(NSNumber nsN) {
return nsN.stringValue.toDs;
}
- Log
- 2025-03-04 修正しました
- 2024-06-09 修正しました
- 2023-02-06 upload