2018-12-13 18:11:24 jameskaron 阅读数 8

一般在原OC项目里新建一个swift文件,Xcode就会提示是否生成桥接文件

但是有些时候可能没有提示,那就需要自己手动建立一系列桥接:

1.swift中用OC:

#import <CommonCrypto/CommonCrypto.h>

 例如上面这个库,把它写在bridge那里即可.

 

2.OC调用swift:

#import "ProjectName-Swift.h"

 在OC的头引入以上语句,即可

同时,swift类里面要加上@objc(类名,变量名,方法名)

 

3.检查名字是否桥接名

 

4.检查新建的项目swift版本是否可用

有些就项目的配置文件,可能仍使用swift3等低版本

 

2017-10-12 17:02:32 happyshaotang2 阅读数 1395


一、 首先创建桥接头文件bridge.h来包含需要引用的Objective-C头文件,并在项目中配置


#import <CommonCrypto/CommonDigest.h>

#import <CommonCrypto/CommonHMAC.h>


二、 建立一个封装类,对String进行HMAC扩展


import Foundation


// MARK: - 加密  HMAC_SHA1/MD5/SHA1/SHA224......

/**  需在桥接文件导入头文件 ,因为C语言的库

 *   #import <CommonCrypto/CommonDigest.h>

 *   #import <CommonCrypto/CommonHMAC.h>

 */

enum CryptoAlgorithm {

    /// 加密的枚举选项

    case MD5, SHA1, SHA224, SHA256, SHA384, SHA512

    

    var HMACAlgorithm: CCHmacAlgorithm {

        var result: Int = 0

        switch self {

        case .MD5:      result = kCCHmacAlgMD5

        case .SHA1:     result = kCCHmacAlgSHA1

        case .SHA224:   result = kCCHmacAlgSHA224

        case .SHA256:   result = kCCHmacAlgSHA256

        case .SHA384:   result = kCCHmacAlgSHA384

        case .SHA512:   result = kCCHmacAlgSHA512

        }

        return CCHmacAlgorithm(result)

    }

    

    var digestLength: Int {

        var result: Int32 = 0

        switch self {

        case .MD5:      result = CC_MD5_DIGEST_LENGTH

        case .SHA1:     result = CC_SHA1_DIGEST_LENGTH

        case .SHA224:   result = CC_SHA224_DIGEST_LENGTH

        case .SHA256:   result = CC_SHA256_DIGEST_LENGTH

        case .SHA384:   result = CC_SHA384_DIGEST_LENGTH

        case .SHA512:   result = CC_SHA512_DIGEST_LENGTH

        }

        return Int(result)

    }

}


extension String {

    /*

     *   func:加密方法

     *   参数1:加密方式; 参数2:加密的key

     */

    func hmac(algorithm: CryptoAlgorithm, key: String) -> String {

        let str = self.cString(using: String.Encoding.utf8)

        let strLen = Int(self.lengthOfBytes(using: String.Encoding.utf8))

        let digestLen = algorithm.digestLength

        let result = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: digestLen)

        let keyStr = key.cString(using: String.Encoding.utf8)

        let keyLen = Int(key.lengthOfBytes(using: String.Encoding.utf8))

        

        CCHmac(algorithm.HMACAlgorithm, keyStr!, keyLen, str!, strLen, result)

        

        let digest = stringFromResult(result:  result, length: digestLen)

        

        result.deallocate(capacity: digestLen)

        

        return digest

    }

    

    private func stringFromResult(result: UnsafeMutablePointer<CUnsignedChar>, length: Int) -> String {

        let hash = NSMutableString()

        for i in 0..<length {

            hash.appendFormat("%02x", result[i])

        }

        return String(hash)

    }

}



注意: swift4.0中不支持同名函数了


2019-09-17 14:17:54 quanhaoH 阅读数 204
  1. 建立桥接头文件在这里插入图片描述
  2. 设置桥接文件位置在这里插入图片描述
  3. 引入需要的framework

#ifndef bridge_h
#define bridge_h

#import "AFNetworking.h"

#endif /* bridge_h */
  1. 直接调用
var dataTask = AFHTTPSessionManager.init().post(<#T##URLString: String##String#>, parameters: <#T##Any?#>, progress: <#T##((Progress) -> Void)?##((Progress) -> Void)?##(Progress) -> Void#>, success: <#T##((URLSessionDataTask, Any?) -> Void)?##((URLSessionDataTask, Any?) -> Void)?##(URLSessionDataTask, Any?) -> Void#>, failure: <#T##((URLSessionDataTask?, Error) -> Void)?##((URLSessionDataTask?, Error) -> Void)?##(URLSessionDataTask?, Error) -> Void#>)
2017-07-20 17:53:00 weixin_33963594 阅读数 18

  OC项目引入swift,

  1.建立 bridge 文件:在OC工程中新建swift文件,确认创建时,会提示建立 一个 项目名-bridging-header.h 文件。

 2,建立 bridge 文件之后,在其中引入要用的 文件名  import

     例如使用Charts 时: @import Charts;

    Charts : 各种统计图形(饼状图、折线图、柱状图等等)工具,流畅好用,效果给力。

3,在工程中需要用到第三方的时候,引入该 bridge 文件即可;

        

转载于:https://www.cnblogs.com/code-Officer/p/7212575.html

没有更多推荐了,返回首页