3.0 데이터를 문자열로 신속하게 이동할 수 있습니까?
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {}
나는 되고 싶다.deviceToken끈을 매다
그러나:
let str = String.init(data: deviceToken, encoding: .utf8)
str가nil
신속한 3.0
어떻게 해야 할까요?data로.string?
Xcode 8/Swift 3.0에서 Push Notifications를 등록하면 작동하지 않습니다. 몇 달 전에 사용해 본 적이 있습니다.
인쇄:
스위프트 3 Data to String 질문에 대한 답변을 구하러 왔는데 좋은 답변을 받지 못했습니다.장난을 좀 친 후에 저는 이것을 생각해 냈습니다.
var testString = "This is a test string"
var somedata = testString.data(using: String.Encoding.utf8)
var backToString = String(data: somedata!, encoding: String.Encoding.utf8) as String!
여기 제 데이터 확장입니다.이것을 추가하면 데이터를 호출할 수 있습니다.대상 문자열()
import Foundation
extension Data
{
func toString() -> String?
{
return String(data: self, encoding: .utf8)
}
}
let str = deviceToken.map { String(format: "%02hhx", $0) }.joined()
방법을 찾았습니다.변환해야 합니다.Data로.NSData:
let characterSet = CharacterSet(charactersIn: "<>")
let nsdataStr = NSData.init(data: deviceToken)
let deviceStr = nsdataStr.description.trimmingCharacters(in: characterSet).replacingOccurrences(of: " ", with: "")
print(deviceStr)
Swift 3 이상에서는 reduce를 사용하기가 훨씬 쉽습니다.
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let token = deviceToken.reduce("") { $0 + String(format: "%02x", $1) }
DispatchQueue.global(qos: .background).async {
let url = URL(string: "https://example.com/myApp/apns.php")!
var request = URLRequest(url: url)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = try! JSONSerialization.data(withJSONObject: [
"token" : token,
"ios" : UIDevice.current.systemVersion,
"languages" : Locale.preferredLanguages.joined(separator: ", ")
])
URLSession.shared.dataTask(with: request).resume()
}
}
레드윙 4의 스위프트 4 버전 답변:
let testString = "This is a test string"
let somedata = testString.data(using: String.Encoding.utf8)
let backToString = String(data: somedata!, encoding: String.Encoding.utf8)
사용할 수도 있습니다.let data = String(decoding: myStr, as: UTF8.self)여기 데이터를 문자열로 변환하는 것에 대한 리소스가 있습니다.
속히
let testString = "This is a test string"
let somedata = testString.data(using: String.Encoding.utf8)
let backToString = String(data: somedata!, encoding: String.Encoding.utf8) as String?
print("testString > \(testString)")
//testString > This is a test string
print("somedata > \(String(describing: somedata))")
//somedata > Optional(21 bytes)
print("backToString > \(String(describing: backToString))")
//backToString > Optional("This is a test string")
웨이지아의 답변을 확대합니다.wang:
extension Data {
func hexString() -> String {
let nsdataStr = NSData.init(data: self)
return nsdataStr.description.trimmingCharacters(in: CharacterSet(charactersIn: "<>")).replacingOccurrences(of: " ", with: "")
}
}
와 함께 사용합니다.deviceToken.hexString()
데이터가 base64 인코딩된 경우.
if ( dataObj != nil ) {
let encryptedDataText = dataObj!.base64EncodedString(options: NSData.Base64EncodingOptions())
NSLog("Encrypted with pubkey: %@", encryptedDataText)
}
아래 애플 문서에 따르면 디바이스 토큰은 디코딩이 불가능합니다.그래서 저는 그냥 두는 것이 최선이라고 생각합니다.
보안아키텍처
장치 토큰은 Apple이 특정 장치의 특정 앱에 할당한 고유 식별자를 포함하는 불투명 NSData 인스턴스입니다.APN만 디바이스 토큰의 내용을 해독하고 읽을 수 있습니다.각 앱 인스턴스는 APN에 등록할 때 고유한 장치 토큰을 수신한 다음 원격 알림 지원 구성에 설명된 대로 토큰을 해당 공급자에게 전달해야 합니다.공급자는 연결된 장치를 대상으로 하는 각 푸시 알림 요청에 장치 토큰을 포함해야 합니다. APN은 장치 토큰을 사용하여 해당 장치가 의도하는 고유한 앱-장치 조합에만 알림이 전달되도록 합니다.
let urlString = baseURL + currency
if let url = URL(string: urlString){
let session = URLSession(configuration: .default)
let task = session.dataTask(with: url){ (data, reponse, error) in
if error != nil{
print(error)
return
}
let dataString = String(data: data!, encoding: .utf8)
print(dataString)
}
task.resume()
}
언급URL : https://stackoverflow.com/questions/39616821/swift-3-0-data-to-string
'programing' 카테고리의 다른 글
| Oracle 10g에서 ROW_MOVEMENT를 활성화/비활성화하면 어떤 영향을 받습니까? (0) | 2023.09.06 |
|---|---|
| 스프링 주입값을 정적 장으로 만드는 방법 (0) | 2023.09.06 |
| 특정 줄을 무시할 수 있습니까? (0) | 2023.09.06 |
| '노드'라는 용어를 인식할 수 없습니다...인 파워셸 (0) | 2023.09.06 |
| UImageView - 이미지의 파일 이름을 할당하는 방법은 무엇입니까? (0) | 2023.09.06 |

