ස්විෆ්ට් වෙතින් පරමාර්ථ-සී කේතය මා අමතන්නේ කෙසේද?


986

ස්විෆ්ට්හිදී, එක් අයෙකු Objective-C කේතය අමතන්නේ කෙසේද?

ඇපල් සමාගම එක් යෙදුමක සහජීවනය ඇති කළ හැකි බව සඳහන් කළ නමුත් මෙයින් අදහස් කරන්නේ ස්විෆ්ට් හි නව පන්ති ගොඩනඟන අතරම පරමාර්ථ-සී වලින් සාදන ලද පැරණි පන්ති තාක්‍ෂණිකව නැවත භාවිතා කළ හැකි බව ද?


13
කොකෝවා සහ පරමාර්ථ-සී සමඟ ස්විෆ්ට් භාවිතා කිරීම සඳහා ඇපල්ගේ මාර්ගෝපදේශය බලන්න .
රික්ස්ටර්


10
මෙම ප්‍රශ්නයට බොහෝ ඉහළ නැංවීම් සහ ත්‍යාගයක් ලැබීම සිත්ගන්නා කරුණකි. මම එය මුලින්ම දුටු විට සිතුවේ: RTFM. ඉදිරිපත් කර ඇති පරිදි එය සැබවින්ම කිසිදු පර්යේෂණයක් නොපෙන්වන අතර දැනට නිල වශයෙන් ස්විෆ්ට් ලේඛනගත කරන සම්පත් දෙකක් හෝ තුනක් පමණක් ඇති අතර, ඉන් එකක් මුළුමනින්ම මේ සඳහා කැපවී ඇත (එය පළමු විවරණයට සම්බන්ධ වේ).
ඇනලොග් ගොනුව

6
VEvolGate: වේදිකා ස්වාධීන භාෂාවක් වීම වළක්වන පරමාර්ථ C හි නොමැති දේ හරියටම කුමක්ද? භාෂාව සහ භාෂා සම්මත පුස්තකාල විවෘත මූලාශ්‍ර වේ. ඔබට වින්ඩෝස්, ඕස් එක්ස්, ලිනක්ස්, බීඑස්ඩී, සොලාරිස් සහ ජීසීසී හෝ එල්එල්වීඑම් සහාය දක්වන වෙනත් ඕනෑම වේදිකාවක් සඳහා අරමුණු සී භාවිතා කළ හැකිය. ජීසීසී හෝ එල්එල්වීඑම් සහාය නොදක්වුවද, හොඳ සී සම්පාදකයෙකු සහිත ඕනෑම වේදිකාවක් වෙත ඔබට පහසුවෙන් පරමාර්ථ සී ගෙන යා හැකිය. මෙයට වඩා වේදිකාවක් ස්වාධීන වන්නේ කෙසේදැයි මම නොදනිමි.
ඇනලොග් ගොනුව

2
Av ඩේවිඩ්මුල්ඩර්: “තර්කනය” කොටස තවමත් අවශ්‍යද?
ෆ්‍රෑන්ක්

Answers:


1407

ස්විෆ්ට් හි අරමුණු-සී පන්ති භාවිතා කිරීම

ඔබ භාවිතා කිරීමට කැමති දැනට පවතින පන්තියක් තිබේ නම්, පියවර 2 සිදු කර 5 වන පියවර වෙත යන්න . (සමහර අවස්ථා සඳහා, මට #import <Foundation/Foundation.hපරණ පරමාර්ථ-සී ගොනුවකට පැහැදිලි යමක් එක් කිරීමට සිදු විය .)

පියවර 1: පරමාර්ථය-සී ක්‍රියාත්මක කිරීම එක් කරන්න - .m

.mඔබේ පන්තියට ගොනුවක් එකතු කර එය නම් කරන්න CustomObject.m.

පියවර 2: පාලම් ශීර්ෂය එක් කරන්න

ඔබගේ .mගොනුව එකතු කරන විට , ඔබට මේ වගේ විමසුමක් ලැබෙනු ඇත:

එක්ස්කෝඩ් වෙතින් මැකෝස් ෂීට්-ශෛලීය සංවාදයක් ඔබ "අරමුණු-සී පාලම් ශීර්ෂයක් වින්‍යාස කිරීමට කැමති දැයි"

ඔව් ක්ලික් කරන්න !

ඔබ විමසුම නොදුටුවේ නම් හෝ අහම්බෙන් ඔබේ පාලම් ශීර්ෂය මකා දැමුවේ නම්, .hඔබේ ව්‍යාපෘතියට නව ගොනුවක් එකතු කර එය නම් කරන්න<#YourProjectName#>-Bridging-Header.h .

සමහර අවස්ථාවන්හිදී, විශේෂයෙන් Objective-C රාමු සමඟ වැඩ කරන විට, ඔබ නිශ්චිතවම Objective-C පන්තියක් එක් නොකරන අතර Xcode හට සම්බන්ධකය සොයාගත නොහැක. මෙම අවස්ථාවේදී, .hඉහත සඳහන් කළ පරිදි ඔබේ ගොනුව සාදන්න , ඉන්පසු ඔබේ ඉලක්කයේ ව්‍යාපෘති සැකසුම් තුළ එහි මාර්ගය සම්බන්ධ කිරීමට වග බලා ගන්න:

ඉහත ඡේදය නිරූපණය කරන සජීවිකරණයක්

සටහන:

ඔබේ ව්‍යාපෘතිය $(SRCROOT)සාර්ව භාවිතයෙන් සම්බන්ධ කිරීම වඩාත් සුදුසුය, එවිට ඔබ ඔබේ ව්‍යාපෘතිය ගෙනයන්නේ නම් හෝ දුරස්ථ ගබඩාවක් භාවිතා කරමින් අන් අය සමඟ වැඩ කරන්නේ නම් එය තවමත් ක්‍රියාත්මක වේ. $(SRCROOT)ඔබගේ .xcodeproj ගොනුව අඩංගු නාමාවලිය ලෙස සිතිය හැකිය. එය මේ වගේ විය හැකිය:

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

පියවර 3: පරමාර්ථ-සී ශීර්ෂය එක් කරන්න - .h

තවත් .hගොනුවක් එකතු කර එය නම් කරන්නCustomObject.h .

පියවර 4: ඔබේ පරමාර්ථ-සී පන්තිය ගොඩනඟන්න

තුළ 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

පියවර 5: පාලම්-ශීර්ෂයට පන්තිය එක් කරන්න

තුළ YourProject-Bridging-Header.h:

#import "CustomObject.h"

පියවර 6: ඔබේ වස්තුව භාවිතා කරන්න

තුළ SomeSwiftFile.swift:

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

පැහැදිලිවම ආනයනය කිරීමේ අවශ්‍යතාවයක් නොමැත; පාලම් ශීර්ෂය එයයි.

පරමාර්ථ-සී හි ස්විෆ්ට් පන්ති භාවිතා කිරීම

පියවර 1: නව ස්විෆ්ට් පන්තියක් සාදන්න

.swiftඔබේ ව්‍යාපෘතියට ගොනුවක් එකතු කර එය නම් කරන්න MySwiftObject.swift.

තුළ MySwiftObject.swift:

import Foundation

@objc(MySwiftObject)
class MySwiftObject : NSObject {

    @objc
    var someProperty: AnyObject = "Some Initializer Val" as NSString

    init() {}

    @objc
    func someFunction(someArg: Any) -> NSString {
        return "You sent me \(someArg)"
    }
}

පියවර 2: ObjC පන්තියට ස්විෆ්ට් ගොනු ආයාත කරන්න

තුළ SomeRandomClass.m:

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

ගොනුව: <#YourProjectName#>-Swift.hඔබට නොපෙනුණත් ඔබගේ ව්‍යාපෘතිය තුළ දැනටමත් ස්වයංක්‍රීයව නිර්මාණය කළ යුතුය.

පියවර 3: ඔබේ පන්තිය භාවිතා කරන්න

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

NSString * retString = [myOb someFunctionWithSomeArg:@"Arg"];

NSLog(@"RetString: %@", retString);

සටහන්:

  1. කේත සම්පුර්ණ කිරීම ඔබ අපේක්ෂා කළ පරිදි ක්‍රියා නොකරන්නේ නම්, වේගවත් Rකේතයක් මඟින් Xcode හට ස්විෆ්ට් සන්දර්භයකින් සමහර අරමුණු-සී කේත සොයා ගැනීමට උදව් කිරීමට ඉක්මන් ගොඩනැගීමට උත්සාහ කරන්න .

  2. ඔබ .swiftපැරණි ව්‍යාපෘතියකට ගොනුවක් එකතු කර දෝෂය ලබා ගන්නේ නම් dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib, Xcode සම්පූර්ණයෙන්ම නැවත ආරම්භ කිරීමට උත්සාහ කරන්න .

  3. උපසර්ගය NSObjectභාවිතා කරමින් පරමාර්ථ-සී වෙත පෙනෙන පිරිසිදු ස්විෆ්ට් පංති (පැවත එන්නන් නොවේ ) මුලින් භාවිතා කළ හැකි වුවද @objc, මෙය තවදුරටත් කළ නොහැක. දැන්, Objective-C හි දෘශ්‍යමාන වීමට නම්, ස්විෆ්ට් වස්තුව එක්කෝ පන්තියට අනුකූල විය යුතුය NSObjectProtocol(මෙය කිරීමට පහසුම ක්‍රමය වන්නේ උරුම කර NSObjectගැනීමයි), හෝ සමහර පූර්ණ සංඛ්‍යා වර්ගයක අමු අගයකින් enumසලකුණු කළ යුතුය . මෙම සීමාවන් නොමැතිව භාවිතා කරමින් ස්විෆ්ට් 1.x කේතයේ උදාහරණයක් සඳහා ඔබට සංස්කරණ ඉතිහාසය නැරඹිය හැකිය .@objcInt@objc


6
ඔබ @objc හෝ ස්විෆ්ට් ක්‍රම සමඟ ක්‍රම විවරණය කිරීම වැදගත් වන්නේ පරමාර්ථ-සී වෙතින් නොපෙනේ.
ටොමේ ලින්හාර්ට්

29
ඔයා හරි. ඔබට එය නියම කිරීමට අවශ්‍ය වන්නේ ඔබ කොකෝවා වස්තු භාවිතා නොකරන්නේ නම් පමණි. Objective-C හි ප්‍රවේශ විය හැකි හා භාවිතා කළ හැකි නම්, ස්විෆ්ට් පන්තියක් පරමාර්ථ-සී පන්තියෙන් පැවත එන්නෙකු විය යුතුය, නැතහොත් එය @objc ලෙස සලකුණු කළ යුතුය.
ටොමේ ලින්හාර්ට්

2
@MarkusRautopuro - පළඳින්නේ මෙහි සිට එය: developer.apple.com/library/prerelease/ios/documentation/Swift/... "
ලෝගන්

2
මෙයද බලන්න: WWDC 2014 සැසිය 406: අරමුණ-සී සමඟ ස්විෆ්ට් ඒකාබද්ධ කිරීම
ස්ටුවර්ට් එම්

6
වෛෂයික සී රාමුවක් ස්විෆ්ට් වෙත ආනයනය කරන්නේ නම්, ඔබේ ව්‍යාපෘතියට Obj C රාමුව රඳා පවතින සියලුම රාමු ආනයනය කිරීමට වග බලා ගන්න (ගොඩනැගීමේ අදියර -> පුස්තකාල සමඟ ද්විමය සම්බන්ධ කරන්න), ඉන්පසු # ආනයන උපසර්ග ශීර්ෂ ගොනුවකට එක් කරන්න. ගොඩනැගීමේ සැකසුම් තුළ ඔබගේ ව්‍යාපෘතියට එකතු කළ යුතුය (උපසර්ග ශීර්ෂ ක්ෂේත්‍රය තුළ). UIKit සහ Foundation වැනි රාමු මෙයට ඇතුළත් වේ, ඒවා දැනටමත් ස්විෆ්ට් තුළ සිට භාවිතා කර ඇතත්. මෙය මාව පැය ගණනක් තිස්සේ තල්ලු කළ අතර කිසිවෙකු මෙම පියවර ලේඛනගත කර ඇති බවක් නොපෙනේ.
user1021430

121

කොකෝවා සහ පරමාර්ථ-සී සමඟ ස්විෆ්ට් භාවිතා කිරීම සඳහා ඇපල්ගේ මාර්ගෝපදේශය බලන්න . මෙම මාර්ගෝපදේශය ස්විෆ්ට් වෙතින් පරමාර්ථ-සී සහ සී කේත භාවිතා කරන ආකාරය ආවරණය කරන අතර ව්‍යාපෘතියක් පරිවර්තනය කරන්නේ කෙසේද යන්න හෝ පවතින ව්‍යාපෘතියක පරමාර්ථ-සී / සී සහ ස්විෆ්ට් කොටස් මිශ්‍ර කර ගැලපෙන්නේ කෙසේද යන්න පිළිබඳ නිර්දේශ ඇත.

C ශ්‍රිත සහ අරමුණු- C ක්‍රම ඇමතීම සඳහා සම්පාදකයා ස්වයංක්‍රීයව ස්විෆ්ට් සින්ටැක්ස් ජනනය කරයි. ප්‍රලේඛනයේ දැක්වෙන පරිදි, මෙම පරමාර්ථය-සී:

UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

මෙම ස්විෆ්ට් කේතය බවට හැරේ:

let myTableView: UITableView = UITableView(frame: CGRectZero, style: .Grouped)

එක්ස්කෝඩ් විසින් මෙම පරිවර්තනය පියාසර කරන විටද සිදු කරයි - ඔබට ස්විෆ්ට් ගොනුවක් සංස්කරණය කරන අතරතුර විවෘතව විවෘතව භාවිතා කර පරමාර්ථ-සී පන්තියේ නමක් ටයිප් කළ හැකිය, එය ඔබව පන්ති ශීර්ෂයේ ස්විෆ්ට්-අයිෆයිඩ් අනුවාදයකට ගෙන යනු ඇත. (ඔබ ද cmd-ක්ලික් ඉක්මනින් ගොනුව තුල API සංකේතය මත මෙම ලබා ගත හැක.) ඒ වගේම සියලුම API පරිශීලක ප්රලේඛනය , iOS 8 සහ OS X මෙහෙයුම් පද්ධතිය v10.10 (ෙයෝස්මයිට්) සංවර්ධක පුස්තකාල අරමුණ-C සහ ස්විෆ්ට් දෙකේම දෘශ්යමාන වේ ආකෘති (උදා UIView).


3
වෙත ඍජු සම්බන්ධයක් ඇපල් ප්රලේඛනය : දැනට පවතින ව්යාපෘතිය ස්විෆ්ට් ඒකාබද්ධ කිරීමට ආකාරය developer.apple.com/library/prerelease/ios/documentation/Swift/...
skywinder

ශීර්ෂ ලිපිගොනු අවශ්‍ය වන්නේ ඇයි සහ සම්බන්ධ කිරීමේ අවධියේදී එය භාවිතා කරන්නේ කෙසේද යන්න ගැන ඔබ උනන්දු වන්නේ නම්, ඔබ මෙම අත්පොත ස්විෆ්ට්
මී පැණි

62

ස්විෆ්ට් ව්‍යාපෘතියක අරමුණු-සී කේතය භාවිතා කිරීම සඳහා පියවරෙන් පියවර උපදෙස් මෙන්න (මේ අවස්ථාවේ දී, තෙවන පාර්ශවයක් විසින් සපයන ලද රාමුවක්):

  1. ගොනුව -> නව -> නව ගොනුව -> පරමාර්ථ-සී ගොනුව තේරීමෙන් ඔබේ ස්විෆ්ට් ව්‍යාපෘතියට ඕනෑම අරමුණු-සී ගොනුවක් එක් කරන්න . සුරැකීමෙන් පසු, එක්ස්කෝඩ් ඔබට පාලම් ශීර්ෂයක් එක් කිරීමට අවශ්‍ය දැයි විමසනු ඇත . ' ඔව් ' තෝරන්න . (මූලාශ්‍රය: derrrick.com )Gif: ව්‍යාපෘති සඳහා හිස් ගොනුවක් එක් කිරීම සහ පාලම් ශීර්ෂය ජනනය කිරීම

සරල පියවර වලින්:

  1. විමසුමක් දිස්වේ, පසුව හරි මත ක්ලික් කරන්න ... එය නොපෙන්වන්නේ නම්, අපි එය පහත දැක්වෙන ආකාරයට අතින් සාදන්නෙමු ... iOS ප්‍රභවයෙන් එක් ශීර්ෂ ගොනුවක් සාදාගෙන ProjectName-Bridging-Header යන නම දෙන්න (උදාහරණය: පරීක්ෂණය -බ්‍රිජින්-හෙඩර්), ඉන්පසු ස්විෆ්ට් සම්පාදක කේතයේ සැකසුම් තැනීමට යන්න -> පරමාර්ථ-සී පාලම එකතු කරන්න පරමාර්ථ-සී පාලමේ නම .. (පරීක්ෂණ / පරීක්ෂණ-පාලම්-හෙඩර්.එච්). ඔව්, ඒක සම්පූර්ණයි.

  2. විකල්පයක් ලෙස, ඔබ එකතු කළ පරමාර්ථ-සී ගොනුව මකන්න (ඉහත GIF රූපයේ "ඕනෑම දෙයක්" ලෙස නම් කර ඇත). ඔබට එය තවදුරටත් අවශ්‍ය නොවේ.

  3. පාලම් ශීර්ෂ ගොනුව විවෘත කරන්න - ගොනු නාමය [YourProject] -Bridging-Header.h ආකාරයෙන් වේ. එයට Xcode සපයන අදහස් දැක්වීමක් ඇතුළත් වේ. තෙවන පාර්ශවීය රාමුවක් වැනි ඔබට ඇතුළත් කිරීමට අවශ්‍ය පරමාර්ථ-සී ගොනුව සඳහා කේත රේඛාවක් එක් කරන්න . උදාහරණයක් ලෙස, ඔබේ ව්‍යාපෘතියට මික්ස්පනෙල් එක් කිරීමට, ඔබට පහත කේත රේඛාව පාලම් ශීර්ෂ ගොනුවට එක් කිරීමට අවශ්‍ය වනු ඇත:

    # ආයාත කරන්න "Mixpanel.h"
  4. දැන් ඕනෑම ස්විෆ්ට් ගොනුවක ඔබට දැනට පවතින පරමාර්ථ-සී කේතය, ස්විෆ්ට් සින්ටැක්ස් තුළ භාවිතා කළ හැකිය (මෙම උදාහරණයේ දී ඔබට මික්ස්පනෙල් එස්ඩීකේ ක්‍රම ආදිය ඇමතිය හැකිය). Xcode විසින් Objective-C ස්විෆ්ට් බවට පරිවර්තනය කරන්නේ කෙසේද යන්න පිළිබඳව ඔබ හුරු විය යුතුය. ඇපල්ගේ මාර්ගෝපදේශය ඉක්මන් කියවීමකි. නැතහොත් අසම්පූර්ණ සාරාංශයක් සඳහා මෙම පිළිතුර බලන්න.

මික්ස්පනෙල් සඳහා උදාහරණය:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    Mixpanel.sharedInstanceWithToken("your-token")
    return true
}

ඒක තමයි!

සටහන: ඔබ ඔබේ ව්‍යාපෘතියෙන් පාලම් ශීර්ෂ ගොනුව ඉවත් කරන්නේ නම් , බිල්ඩ් සැකසීම් වෙත ගොස් "ස්විෆ්ට් කම්පයිලර් - කේත උත්පාදනය" යටතේ " අරමුණු-සී පාලම් ශීර්ෂය " සඳහා අගය ඉවත් කිරීමට වග බලා ගන්න .


39

ඔබට ලස්සන පෝස්ට් ස්විෆ්ට් සහ කොකෝපොඩ්ස් කියවිය හැකිය . මූලික වශයෙන්, අපි පාලම් ශීර්ෂ ගොනුවක් සාදා එහි සියලු අරමුණු-සී ශීර්ෂයන් එහි තැබිය යුතුය. ඉන්පසු අපි එය අපගේ ගොඩනැගීමේ සැකසුම් වලින් යොමු කළ යුතුය. ඊට පසු, අපට Objective-C කේතය භාවිතා කළ හැකිය.

let manager = AFHTTPRequestOperationManager()
manager.GET(
  "http://example.com/resources.json",
  parameters: nil,
  success: { (operation: AFHTTPRequestOperation!,
              responseObject: AnyObject!) in
      println("JSON: " + responseObject.description)
  },
  failure: { (operation: AFHTTPRequestOperation!,
              error: NSError!) in
      println("Error: " + error.localizedDescription)
  })

කොකෝවා සහ පරමාර්ථ-සී සමඟ ස්විෆ්ට් භාවිතා කරන ඇපල් ලේඛනය දෙස බලන්න .


25

මම සරල Xcode 6 ව්‍යාපෘතියක් ලිවූ අතර එය C ++, Objective-C සහ Swift කේතය මිශ්‍ර කරන්නේ කෙසේදැයි පෙන්වයි:

https://github.com/romitagl/shared/tree/master/C-ObjC-Swift/Performance_Console

විශේෂයෙන්, උදාහරණය ස්විෆ්ට් වෙතින් පරමාර්ථ-සී සහ සී ++ ශ්‍රිතයක් ලෙස හැඳින්වේ .

ප්රධාන දෙය නම් හවුල් ශීර්ෂයක් වන Project-Bridging-Header.h නිර්මාණය කර පරමාර්ථ-සී ශීර්ෂයන් එහි තැබීමයි.

කරුණාකර ව්‍යාපෘතිය සම්පූර්ණ උදාහරණයක් ලෙස බාගත කරන්න.


24

තවත් එක් දෙයක් මම මෙහි එක් කිරීමට කැමතියි:

@ ලෝගන්ගේ පිළිතුරට මම ස්තූතිවන්ත වෙමි. පාලම් ගොනුවක් සහ සැකසුම් නිර්මාණය කිරීමට එය බොහෝ උපකාර කරයි.

නමුත් මේ සියලු පියවරයන් සිදු කිරීමෙන් පසුව මට තවමත් ස්විෆ්ට් හි වෛෂයික-සී පන්තියක් ලැබෙන්නේ නැත.

මම cocoapodsපුස්තකාලය භාවිතා කර එය මගේ ව්‍යාපෘතියට ඒකාබද්ධ කළෙමි . ඒ pod "pop".

එබැවින් ඔබ ස්විෆ්ට් හි Objective-C පොඩ් භාවිතා කරන්නේ නම් ඔබට ලබා ගත නොහැකි අවස්ථාවක් හෝ importපන්ති ස්විෆ්ට් වෙත ලබා ගත හැකිය .

ඔබට කළ යුතු සරලම දේ:

  1. <YOUR-PROJECT>-Bridging-Headerගොනුව වෙත යන්න සහ
  2. මෙම ප්රකාශය වෙනුවට #import <ObjC_Framework>කිරීමට@import ObjC_Framework

උදාහරණයක් ලෙස: (පොප් පුස්තකාලය)

ප්රතිස්ථාපනය කරන්න

#import <pop/POP.h>

සමග

@import pop;

වැඩ නොකරන clang importවිට භාවිතා කරන්න #import.


# ආයාත ක්‍රියා නොකරන විට ක්ලැන්ග් ආනයනය භාවිතා කරන්න. කුමක්? අපි ආනයනය කළ යුතු යැයි කීවේ නැද්ද?!
මී පැණි

22

ප්‍රලේඛනයෙන් උපුටා ගැනීම :

මොඩියුලයක් ලෙස ප්‍රවේශ විය හැකි ඕනෑම අරමුණු-සී රාමුවක් (හෝ සී පුස්තකාලයක්) කෙලින්ම ස්විෆ්ට් වෙත ආනයනය කළ හැකිය. ෆවුන්ඩේෂන්, යූඅයිකිට්, සහ ස්ප්‍රයිට්කිට් වැනි සියලුම අරමුණු-සී පද්ධති රාමු මෙන්ම පද්ධතිය සමඟ සපයා ඇති පොදු සී පුස්තකාල ද මෙයට ඇතුළත් ය. උදාහරණයක් ලෙස, පදනම ආනයනය කිරීම සඳහා, ඔබ වැඩ කරන ස්විෆ්ට් ගොනුවේ ඉහළට මෙම ආනයන ප්‍රකාශය එක් කරන්න:

import Foundation

මෙම ආනයනය මගින් එන්එස්ඩේට්, එන්එස්යූආර්එල්, එන්එස්මුටබල් ඩේටා ඇතුළු සියලුම පදනම් ඒපීඅයි සහ ඒවායේ සියලු ක්‍රම, ගුණාංග සහ කාණ්ඩ ස්විෆ්ට් හි කෙලින්ම ලබා ගත හැකිය.


12

ස්විෆ්ට් වෙත පරමාර්ථ-සී පුස්තකාලයක් එක් කිරීමට උත්සාහ කරන ඕනෑම අයෙකු සඳහා සටහනක්: ඔබ -ObjC එකතු කළ යුතුය දී බිල්ඩ් සැකසුම් -> වස්තු සබැඳීම -> වෙනත් Linker කොඩි .


මන්ද? කරුණාකර මෙම ධජය කරන්නේ කුමක්ද සහ එය එකතු කළ යුත්තේ ඇයිද යන්න පිළිබඳ තොරතුරු එක් කරන්න.
ජොහාන් කාල්සන්

10

ඔබ බ්‍රිජිං ශීර්ෂයක් සෑදූ පසු, බිල්ඩ් සැකසුම => "අරමුණු-සී පාලම් ශීර්ෂය" සඳහා සොයන්න.

මඳක් පහළින් ඔබට "" පරමාර්ථ-සී ජනනය කළ අතුරුමුහුණත් ශීර්ෂ නාමය "ගොනුව හමුවනු ඇත.

ඔබගේ දර්ශන පාලකයේ එම ගොනුව ආයාත කරන්න.

උදාහරණය: මගේ නඩුවේ: "Dauble-Swift.h"

රූප විස්තරය මෙහි


5

නව ක්ලික් කරන්න ගොනු මෙනුව ගොනු තෝරාගත් භාෂා පරමාර්ථය තෝරන්න. එම අවස්ථාවේදී එය ස්වයංක්‍රීයව "පරමාර්ථ-සී බ්‍රිජින් හෙඩර්" ගොනුවක් ජනනය කරන අතර එය යම් පන්ති නාමයක් අර්ථ දැක්වීමට භාවිතා කරයි.

"ස්විෆ්ට් කම්පයිලර් - කේත උත්පාදනය" යටතේ "අරමුණු-සී පාලම් ශීර්ෂය".


3
  1. NewFile -> Source -> header ගොනුවෙන් .h ගොනුවක් සාදන්න
  2. Your_Target_Name-Bridging-Header.h ගොනුවේ නම සුරකින්න. මෙහි සිටින පුද්ගලයින්ට ඔවුන්ගේ ව්‍යාපෘති නාමය ලබා ගැනීමෙන් පොදු වැරැද්දක් සිදු වේ, නමුත් දෙකම වෙනස් නම් එය සාමාන්‍යයෙන් ව්‍යාපෘතියේ ඉලක්කයේ නම විය යුතුය.
  3. බිල්ඩ් සැකසුම් වලදී Objective-C Bridging Header සෙවීම ධජය සහ ඔබ විසින් අලුතින් සාදන ලද පාලම් ගොනුවේ ලිපිනය දමන්න, ඔබට එය කළ හැකිය ගොනුව මත දකුණු ක්ලික් කරන්න -> සෙවුමෙහි පෙන්වන්න -> පෙළ ප්‍රදේශය තුළ ගොනුව ඇදගෙන යන්න එවිට ලිපිනය ජනාකීර්ණ වන්න.
  4. භාවිතා #import Your_Objective-C_file.h
  5. ස්විෆ්ට් ගොනුවේදී ඔබට ObjC ගොනුවට ප්‍රවේශ විය හැකි නමුත් වේගවත් භාෂාවෙන් පමණි.

3

Xcode 10.1 හි ස්විෆ්ට් 4.2.1 ව්‍යාපෘතියේදී ඔබට පහසුවෙන් Objective-C ගොනුව එක් කළ හැකිය. Objective-C ගොනුව ස්විෆ්ට් ව්‍යාපෘතියට සම්බන්ධ කිරීම සඳහා පහත පියවර අනුගමනය කරන්න.

පියවර_01: ස්විෆ්ට් භාෂාව භාවිතයෙන් නව Xcode ව්‍යාපෘතියක් සාදන්න:

File> New> Project> objc.

පියවර_02: ස්විෆ්ට් ව්‍යාපෘතියේදී නව අරමුණු-සී ගොනුවක් එක් කරන්න:

File> New> File...> macOS> Objective-C File.

පියවර_03: ඔබ පළමු වරට ස්විෆ්ට් ව්‍යාපෘතියට නව අරමුණු-සී ගොනුවක් එක් කළහොත්, Xcode ඔබෙන් මෙසේ අසයි:

Would you like to configure an Objective-C bridging header?

රූප විස්තරය මෙහි ඇතුළත් කරන්න

පියවර_04: විකල්පය තෝරන්න:

Create Bridging Header.

පියවර_05: නමක් සමඟ අනුරූප ගොනුවක් ජනනය වේ:

Objc-Bridging-Header.h.

රූප විස්තරය මෙහි ඇතුළත් කරන්න

පියවර_06: දැන් ඔබට පාලම් ශීර්ෂයේ බ්‍රිජ් ගොනු මාර්ගය සැකසිය යුතුය. Project Navigator හි නම සහිත ව්‍යාපෘතිය මත ක්ලික් කර objcඉන්පසු තෝරන්න:

Build Settings> Objective-C Bridging Header> Objc-Bridging-Header.h.

පියවර_07: Objc-Bridging-Header.hගොනු මාර්ගයක් ජනනය කිරීම සඳහා ඔබේ කොටුව තුළට ඇදගෙන යන්න .

රූප විස්තරය මෙහි ඇතුළත් කරන්න

පියවර_08: ඔබේ Objc-Bridging-Header.hගොනුව විවෘත කර ඔබේ ස්විෆ්ට් ගොනුවේ භාවිතා කිරීමට අවශ්‍ය පරමාර්ථ-සී ගොනුව ආයාත කරන්න.

#import "SpecialObjcFile.m"

මෙහි අන්තර්ගතය SpecialObjcFile.m:

#import <Foundation/Foundation.h>

@interface Person: NSObject {
@public
    bool busy;
}
@property
    bool busy;
@end

පියවර_09: දැන් ඔබේ ස්විෆ්ට් ගොනුවේ, ඔබට පරමාර්ථ-සී පන්තියක් භාවිතා කළ හැකිය:

override func viewDidLoad() {
    super.viewDidLoad()
    let myObjcContent = Person()
    print(myObjcContent.busy)
}

රූප විස්තරය මෙහි ඇතුළත් කරන්න රූප විස්තරය මෙහි ඇතුළත් කරන්න


2

රූප විස්තරය මෙහි ඇතුළත් කරන්නමම ගිතබ් හි ව්‍යාපෘතිය එකතු කර ඇති අතර එය කුඩා සාම්පලයක් ඇතුළත් වේ.

ObjectiveC පන්තිය වේගයෙන් අමතන්න


සටහන: - ඔබ xcode ට වඩා වේගවත් ව්‍යාපෘතියක් තුළ Objc පන්තියක් නිර්මාණය කරන විට පන්තිය ස්වයංක්‍රීයව පාලම් කිරීම ඉල්ලා සිටී.
කරදරයක්

1

නවතම ඒවා හැර ලෝගන්ස් පිළිතුර හොඳින් ක්‍රියාත්මක වේSwift 5 සම්පාදක දෝෂයක් වේ. ස්විෆ්ට් 5 හි වැඩ කරන පුද්ගලයින් සඳහා වන විසඳුම මෙන්න.

ස්විෆ්ට් 5

import Foundation

class MySwiftObject : NSObject {

    var someProperty: AnyObject = "Some Initializer Val" as AnyObject

    override init() {}

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

1

වේගවත් පාරිභෝගික, පරමාර්ථ-සී නිෂ්පාදකයා

  1. නව ශීර්ෂයක් .hසහ ක්‍රියාත්මක කිරීමේ .mලිපිගොනු එක් කරන්න - කොකෝවා පන්ති ගොනුව (පරමාර්ථ-සී)
    උදාහරණයක් ලෙස MyFileName.

  2. පාලම් ශීර්ෂය වින්‍යාස කරන්න
    ඔබ Would you like to configure an Objective-C bridging headerක්ලික් කිරීම දුටු විට - ඔව්

    • <target_name>-Bridging-Header.h ස්වයංක්‍රීයව ජනනය වේ
    • සැකසුම් සාදන්න -> පරමාර්ථ-සී පාලම් ශීර්ෂය
  3. ගමත් නගරයත් යා-ශීර්ෂකය කිරීමට පන්තියේ එකතු
    දී <target_name>-Bridging-Header.hරේඛාවක් එකතු#import "<MyFileName>.h"

ඊට පසු ඔබට ඇතුළත සිට භාවිතා කළ MyFileNameහැකියObjective-CSwift

PS ඔබ දැනට පවතින Objective-C ගොනුවක් ස්විෆ්ට් ව්‍යාපෘතියට එකතු කළ යුතු නම් Bridging-Header.hඑය කලින් එකතු කර ආයාත කරන්න

පරමාර්ථ-සී පාරිභෝගික, ස්විෆ්ට් නිෂ්පාදකයා

  1. A එකතු කර <MyFileName>.swiftදිගු කරයිNSObject

  2. ObjC පන්තියට ස්විෆ්ට් ගොනු ආයාත
    කරන්න #import "<target_name>-Swift.h"ඔබේ පරමාර්ථ-සී ගොනුවට එක් කරන්න

  3. [@Objc සහ jobjcMembers] විසින් පොදු ස්විෆ්ට් කේතය @objc නිරාවරණය කරන්න

ඊට පසු ඔබට භාවිතා Swiftකළ හැකියObjective-C


0

ඇපල් විසින් මෙම ලේඛනයේ නිල මාර්ගෝපදේශයක් ලබා දී ඇත: කෙසේද-ඇමතීම-වෛෂයික-සී-කේතය-වේගයෙන්

අදාළ කොටස මෙන්න:

එකම යෙදුම් ඉලක්කය තුළ ස්විෆ්ට් කේතයට පරමාර්ථ-සී ගොනු සමූහයක් ආයාත කිරීම සඳහා, එම ලිපිගොනු ස්විෆ්ට් වෙත නිරාවරණය කිරීම සඳහා ඔබ අරමුණු-සී පාලම් ශීර්ෂ ගොනුවක් මත විශ්වාසය තබයි . ඔබ දැනට පවතින Objective-C යෙදුමකට ස්විෆ්ට් ගොනුවක් හෝ පවතින ස්විෆ්ට් යෙදුමකට Objective-C ගොනුවක් එක් කරන විට මෙම ශීර්ෂය නිර්මාණය කිරීමට Xcode ඉදිරිපත් කරයි.

ඔබ පිළිගන්නේ නම්, එක්ස්කෝඩ් ඔබ විසින් සාදන ලද ගොනුව සමඟ බ්‍රිජිං ශීර්ෂ ගොනුව නිර්මාණය කරන අතර ඔබේ නිෂ්පාදන මොඩියුලයේ නම භාවිතා කර එය නම් කරන්නේ "-බ්‍රිජින්-හෙඩර්.එච්" ය. විකල්පයක් ලෙස, ගොනුව> නව> ගොනුව> [මෙහෙයුම් පද්ධතිය]> මූලාශ්‍රය> ශීර්ෂ ගොනුව තේරීමෙන් ඔබට පාලම් ශීර්ෂයක් නිර්මාණය කළ හැකිය.

ඔබේ පරමාර්ථ-සී කේතය ඔබේ ස්විෆ්ට් කේතයට නිරාවරණය කිරීම සඳහා පාලම් ශීර්ෂය සංස්කරණය කරන්න:

  1. ඔබේ පරමාර්ථ-සී පාලම් ශීර්ෂය තුළ, ඔබට ස්විෆ්ට් වෙත නිරාවරණය කිරීමට අවශ්‍ය සෑම අරමුණු-සී ශීර්ෂයක්ම ආයාත කරන්න .
  2. බිල්ඩ් සැකසීම් වලදී, ස්විෆ්ට් කම්පයිලර් - කේත උත්පාදනය තුළ, පරමාර්ථ-සී බ්‍රිජිං හෙඩර් බිල්ඩ් සැකසුම පාලම් ශීර්ෂ ගොනුවට මාර්ගයක් ඇති බවට වග බලා ගන්න. බිල්ඩ් සැකසීම් තුළ ඔබේ Info.plist මාර්ගය නියම කර ඇති ආකාරයටම මාර්ගය ඔබේ ව්‍යාපෘතියට සාපේක්ෂව විය යුතුය. බොහෝ අවස්ථාවලදී, ඔබට මෙම සිටුවම වෙනස් කිරීමට අවශ්‍ය නොවේ.

පාලම් ශීර්ෂයේ ලැයිස්තුගත කර ඇති ඕනෑම පොදු පරමාර්ථ-සී ශීර්ෂයක් ස්විෆ්ට් වෙත දැකිය හැකිය.


0

වෛෂයික-සී වෛෂයික-ඇ

1

  1. Xcode ව්යාපෘතියේ පාලම- header.h ගොනුව සාදන්න
  2. .h ගොනුව බ්‍රිජ්-හෙඩර් ගොනුවෙන් ආයාත කරන්න
  3. බිල්ඩ් සැකසුම් තුළ පාලම්-ශීර්ෂයේ මාර්ගය සකසන්න.
  4. ව්‍යාපෘතිය පිරිසිදු කරන්න

2

  1. ව්යාපෘතියේ වෛෂයික-සී ගොනු සාදන්න (එය ස්වයංක්‍රීයව ඔබ වෙනුවෙන් ගොඩනැඟිලි සැකසුම් තුළ මාවත සකසයි)
  2. .h ගොනුව බ්‍රිජ්-හෙඩර් ගොනුවෙන් ආයාත කරන්න

දැන් යන්න හොඳයි ස්තූතියි

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.