由于Swift目前没有try-catch,我怎么能防止在这行代码中出现错误数据崩溃?
var myObject = NSKeyedUnarchiver.unarchiveObjectWithData(data) as MyClass
Run Code Online (Sandbox Code Playgroud)
UPDATE
我在操场上创建了一个非常简单的案例来进行演示.假设我们不知道是什么data,我如何在第二行捕获SIGABRT?是否无法检查以确保在调用之前可以取消归档NSData对象unarchiveObjectWithData?
var data = "foo bar".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
if let unarc = NSKeyedUnarchiver.unarchiveObjectWithData(data) { // Execution was interrupted: signal SIGABRT
}
Run Code Online (Sandbox Code Playgroud) 我试图让 SwiftUI 识别 UIViewRepresentable 的内在大小,但它似乎把它当作框架设置为maxWidth: .infinity, maxHeight: .infinity. 我创建了一个人为的例子,这是我的代码:
struct Example: View {
var body: some View {
VStack {
Text("Hello")
TestView()
}
.background(Color.red)
}
}
struct TestView: UIViewRepresentable {
func makeUIView(context: UIViewRepresentableContext<TestView>) -> TestUIView {
return TestUIView()
}
func updateUIView(_ uiView: TestUIView, context: UIViewRepresentableContext<TestView>) {
}
typealias UIViewType = TestUIView
}
class TestUIView: UIView {
required init?(coder: NSCoder) { fatalError("-") }
init() {
super.init(frame: .zero)
let label = UILabel()
label.text = "Sed mattis urna a ipsum fermentum, …Run Code Online (Sandbox Code Playgroud) 我正在使用PassKit实现Apple Pay,我正在以正确的方式显示对话框并处理委托方法,但每次我使用touch Id验证购买时它都显示"付款未完成"并且从未达到我的委托方法paymentAuthorizationViewController:didAuthorizePayment:completion:.我完全做了所有这些事情来设置苹果工资,但我似乎无法获得一个令牌发送到我的支付网关.
PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
self.paymentRequest = request;
request.countryCode = @"US";
request.currencyCode = @"USD";
request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa];
request.merchantCapabilities = PKMerchantCapabilityEMV;
request.merchantIdentifier = @"merchant.com.*******";
request.requiredShippingAddressFields = PKAddressFieldPostalAddress;
request.requiredBillingAddressFields = PKAddressFieldPostalAddress;
request.paymentSummaryItems = [self paymentSummaryItems];
self.paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
self.paymentPane.delegate = self;
if (self.paymentPane) {
[self presentViewController:self.paymentPane animated:TRUE completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
这就是我所看到的,屏幕就在那里,一遍又一遍地说"再试一遍":

如果我发布对我的应用程序的更新,删除iOS 6支持并添加iOS 7兼容性,那么iOS 6上的用户会发生什么:
任何人都可以解释为什么第1行工作创建一个空的swift字典,但第2行不是当我尝试用int键和双值元组创建一个swift字典时....应该怎么做?
var testDic2 = [Int:Double]()
var testDic3 = [Int:(Double,Double)]()
Run Code Online (Sandbox Code Playgroud)
我在游乐场尝试了各种组合,唯一没有给我编译错误的版本如下
var possibleTips = [Int(): (tipAmt:Double(), total:Double())]
Run Code Online (Sandbox Code Playgroud)
但我不确定这最后一种形式是否按照我的意愿声明字典(即按照上面的testDict3)
ios ×3
swift ×3
app-store ×1
applepay ×1
dictionary ×1
literals ×1
objective-c ×1
swiftui ×1
tuples ×1