Antonio Linares wrote:
Que extensi贸n de fichero usas para swift ?
Los Archivos swift usan la extension .Swift
Antonio Linares wrote:
C贸mo lo compilas ?
C贸mo lo enlazas ?
Para el experimento he realizado lo siguiente ..
Por un lado he creado dos carpetas nuevas dentro de la estructura de fivemac
una es objs donde van a parar los obj de archivos swift
otra es swift dentro de source que es donde he colocado el archivo swift experimental y donde van a parar los archivos auxiliares generados .
he creado dos archivos nuevos para no molestar demasiado a lo que tenemos en fivemac uno llamado foo.swift que he colocado en la capeta swift y otro llamado swfun.m que he colocado en winapi y que tiene el c贸digo para recoger los resultados ...
He modificado nuestro make file a帽adiendo :
SWIFTFLAGS = -I../include -sdk $(shell xcrun --show-sdk-path -sdk macosx)
una nueva secci贸n ...
SWIFT_OBJS = ./objs/foo.o
y una nueva directiva de compilaci贸n
./objs/%.o : ./source/swift/%.swift
if [ ! -d "objs" ]; then mkdir objs; fi
swiftc -frontend -c -color-diagnostics -primary-file $< \
-module-name Bridgette \
$(SWIFTFLAGS) -emit-module -emit-module-path ./source/swift/$*.swiftmodule \
-emit-objc-header-path ./source/swift/$*-Swift.h \
-enable-testing -enable-objc-interop -parse-as-library \
-o $@
if [ ! -d "lib" ]; then mkdir lib; fi
ar rc ./lib/libfivec.a $@
Esto hace que los archivos colocados en la carpeta swift sean compilados , que generen un archivo .o y que generen un archivo cabecera <archivo>-Swift.h .
Este archivo de cabecera debe incluirse en el archivo .m que quiera usar funciones del archivo swift .
Se tendria que colocar al principio ya que si no esta generado el archivo .o de swift y su cabecera el archivo .m que contenga su c贸digo fallar谩 al compilar .
Dentro de swift las funciones a usar las he colocado dentro de una clase publica swift y he creado m茅todos parta las funciones.
Todo esto es un experimento y est谩 muy verde sobre todo el tema de paso de paramentos y sus tipos .
Apple ha apostado por swift en detrimento de objC , esta claro que se puede mezclar c贸digo swift con c贸digo objC .
Ya tenemos los comandos para poder compilar desde linea de comandos o desde un makefile .
Swift tiene un metodo relativamente simple para poder usar una funci贸n objC dentro de su c贸digo y debemos pensar que tanto las funciones internas de Harbour como nuestras funciones C son al final funciones C o lo que es lo mismo ObjC .
Desde una funci贸n C tambi茅n podemos recuperar valores de funciones completas de swift y as铆 poder usarlas dentro de harbour .
Uso simple ( sin usar funciones C dentro de swift )
archivo swfun.m
#include <fivemac.h>
#import "../swift/foo-Swift.h"
HB_FUNC( HELLOCC )
{
NSString * stringIni = hb_NSSTRING_par( 1 ) ;
聽 聽 foo * sis = [[ foo alloc] init] ;
// NSString * string = 聽 [sis helloWithName:@"manuel" ] 聽;
聽 聽 NSString * string = 聽 [sis helloWithName: stringIni ] 聽;
聽 聽 hb_retc( 聽[ string cStringUsingEncoding : NSUTF8StringEncoding ] );
聽 聽 聽
}
archivo foo.swift
import Foundation
@objc public class foo : NSObject {
聽
聽 聽 聽 聽@objc public func hello( name: String ) -> String {
聽 聽 聽 聽 聽 return "Hello querido \( uno )"
聽 聽
聽 聽 }
聽 聽 聽 聽 聽 聽
}