SORU
2 HAZİRAN 2014, PAZARTESİ


Nasıl Objective C, Swift kodu arama

Apple'dan yeni Swift dilinde, nasıl bir Objective-C kodu mu?

Apple onlar birarada bulunduğu bir uygulama, ama bu teknik olarak yeniden kullanma, eski dersleri Objective-C iken yapılan swift yeni sınıflar inşa anlamına mı geliyor? diye belirtti

Muhakeme

Objective-C Swift platform bağımlı ise platform bağımsız bir dildir. Non-platform bağımlı kod (iş mantığı kitaplıkları) hızlı yazma dolayısıyla da pek akıllıca olmaz. Ancak platform bağımlı kod (arayüz örneğin ilgili) yazı gayet iyi olurdu. İyi bir fikir olacağını söylemek değil, ancak kesinlikle bir ilgi alanıdır

CEVAP
3 HAZİRAN 2014, Salı


Objective-C Swift Sınıfları kullanarak

** Eğer kullanmak istediğiniz varolan bir sınıf varsa, gerçekleştirmekAdım 2ve sonra geçinAdım 5. (Bazı durumlarda, eski ObjC Dosya)açık #import <Foundation/Foundation.h eklemek zorunda kaldım **

Adım 1: Objective-C Uygulama -- Ekleyin .m

Sınıf .m Bir dosya ekleyin ve Adı CustomObject.m

2. Adım: Köprü Başlığı Ekleyin

.m dosyanızı eklerken, büyük olasılıkla şuna benzer bir ileti ile vurmak olacak:

enter image description here

TıklayınEVET!

Sor, veya yanlışlıkla silinen köprü Başlığı gördün yoksa, projenize .h yeni bir dosya ekleyin ve Adı <#YourProjectName#>-Bridging-Header.h

ObjC çerçeveler ile çalışmak özellikle bazı durumlarda, Objective-C sınıfı açıkça Ekle değilsin ve böyle büyük mükafat linker bulamıyorum. Bu durumda, yukarıda belirtildiği gibi .h dosyası oluşturun, sonra da şu şekilde: hedef proje ayarları yolundaki link emin olun

enter image description here

Not

Sizin proje üzerinde çalışmak diğer bir uzak repo kullanarak, yine de çalışır, böylece en iyi uygulama $(SRCROOT) makro kullanarak projenizi bağlantı. $(SRCROOT) içeren dizini olarak düşünülebilir .xcodeproj dosya. Bu gibi görünebilir:

$(SRCROOT)/Folder/Folder/<#YourProjectName#>-Bridging-Header.h

Adım 3: Objective-C -- Başlık Ekleyin .h

.h CustomObject.h dosya başka bir ekleyin

Adım 4: Objective-C Sınıf Oluşturun

CustomObject.h

#import <Foundation/Foundation.h>

@interface CustomObject : NSObject

@property (strong, nonatomic) id someProperty;

- (void) someMethod;

@end

CustomObject.m

#import "CustomObject.h"

@implementation CustomObject 

- (void) someMethod {
    NSLog(@"SomeMethod Ran");
}

@end

Adım 5:-Başlık Köprü için Sınıf Ekleyin

YourProject-Bridging-Header.h:

#import "CustomObject.h"

Adım 6: Nesne Kullanın

SomeSwiftFile.swift:

var instanceOfCustomObject: CustomObject = CustomObject()
instanceOfCustomObject.someProperty = "Hello World"
println(instanceOfCustomObject.someProperty)
instanceOfCustomObject.someMethod()

Açıkça ithalata gerek, bu köprü Başlığı.

Objective-C kullanarak Swift Sınıflar

Adım 1: Yeni Swift Sınıf Oluşturun

Projenize .swift bir dosya ekleyin ve Adı MySwiftObject.swift

MySwiftObject.swift:

import Foundation

class MySwiftObject : NSObject {

    var someProperty: AnyObject = "Some Initializer Val"

    init() {}

    func someFunction(someArg:AnyObject) -> String {
        var returnVal = "You sent me \(someArg)"
        return returnVal
    }

}

Adım 2: ObjC Sınıfa Swift Dosyaları Almak

SomeRandomClass.m:

#import "<#YourProjectName#>-Swift.h"

Dosya:<#YourProjectName#>-Swift.h zaten eğer bunu görebiliyorsanız bile projenizde otomatik olarak oluşturulmuş olmalıdır.

Adım 3: sınıf Kullanın

MySwiftObject * myOb = [MySwiftObject new];
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
myOb.someProperty = @"Hello World";
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
NSString * retString = [myOb someFunction:@"Arg"];
NSLog(@"RetString: %@", retString);

Objective-C Swift SAF Sınıfları kullanarak

Dışarı tarafından işaret olarak@TomášLinhartyorum, erişilebilir olması ve Objective-C, Swift kullanışlı bir sınıf Objective-C sınıfı ya da işaretli olmalı soyundan olmalı*. *38"" NSObject derleyici bizim ilk örnek olmasıdır soyundan otomatik olarak yapar. Hadi Objective-C Sınıfı soyundan olmayan örnek bir sınıf bakın.

Adım 1: Yeni Swift Sınıf Oluşturun

Projenize .swift bir dosya ekleyin ve Adı PureSwiftObject.swift

PureSwiftObject.swift:

import Foundation

// Note '@objc' prefix
@objc class PureSwiftObject {

    var name: String
    init(name: String) {
        self.name = name
    }

    // Needed to add a class level initializer
    class func newInstanceNamed(name: String) -> PureSwiftObject {
        return PureSwiftObject(name: name)
    }

    // Just a method for demonstration
    func someMethod() {
        println("Some method ran in pure swift object")
    }
}

Bunun için, sınıf başlatıcı aradım oluşturmak 'newİnstanceNamed:'. Bu sınıf artık artık erişebilir NSObject, soyundan olduğu için '' veya ''. yeni tahsis Belki başka bir çözüm vardır, ama bu şimdiye kadar bulduğum tek yoludur. Doktorlar bu herhangi bir açık söz bulamadım. Senin ve benim yaklaşım ters düşerse lütfen bana söyle ve cevabı önerilen stil uymak için güncelleriz.

Adım 2: ObjC Sınıfa Swift Dosyaları Almak

SomeRandomClass.m:

#import "<#YourProjectName#>-Swift.h"

eğer çünkü eğer değil ()

Adım 3: saf swift sınıfı Kullanın

PureSwiftObject * pureSwiftObject = [PureSwiftObject newInstanceNamed:@"Janet"];
NSLog(@"PureSwiftNamed: %@", pureSwiftObject.name);
[pureSwiftObject someMethod];

Not:

1.CodeCompletion görmek istemedigim gibi davranmak doğru değildi. Benim sistemimde, hızlı çalışan inşa w/, "r" Hızlı Objc kod ve yardımcısı bulmamda yardımcı olmadı tam tersi. cmd

2.Büyük bir proje için .swift dosya ekleme ve hata alırsanız: dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib tamamen 50 ** deneyin

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caroline Martin

    Caroline Mar

    19 EYLÜL 2008
  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006
  • Jonathan D.

    Jonathan D.

    3 Kasım 2006