草庐IT

material-swift

全部标签

swift - 让委托(delegate)在主线程以外的地方运行

我通常想知道如何让swift委托(delegate)在主线程以外的专用线程中运行。更具体地说,我目前正在使用HueSDK4EDK建立我的应用程序与Hue网桥的连接。该过程的一部分是定义状态观察者和连接观察者(作为委托(delegate))来处理传入的事件。privatefuncbuildBridge(withBridgebridge:BridgeInfoModel)->PHSBridge{returnPHSBridge.init(block:{(builder)in...builder?.bridgeConnectionObserver=selfbuilder?.add(self)},

swift 4 Codable - 如果有字符串或字典如何解码?

我有这样的结构:structOrderLine:Codable{letabsUrl:String?letrestApiUrl:String?letdescription:String?letquantity:Int?letsubscription:Subs?lettotal:Double?}structSubs:Codable{letquantity:Int?letname:String?}一些OrderLine在服务器响应中有"subscription":{"quantity":6,"name":"3Months"},但有时它有String类型:"subscription":"",没

swift - 为什么子协议(protocol)不符合其父协议(protocol)?

这个问题在这里已经有了答案:Whycan'taget-onlypropertyrequirementinaprotocolbesatisfiedbyapropertywhichconforms?(3个答案)关闭3年前。我有符合协议(protocol)的结构,但使用的是派生协议(protocol),而不是直接使用其父协议(protocol):protocolA{}protocolB:A{}protocolC{varproperty:A{get}}structFoo:C{letproperty:A}structBar:C{letproperty:B}//Error:Type'Bar'doe

ios - 向后滑动添加 Action swift 4

我已将我的一个ViewController中导航栏中的后退按钮更改为自定义按钮,并为该按钮提供了按下时要执行的操作:self.navigationItem.hidesBackButton=trueletbackButton=UIBarButtonItem(image:UIImage(named:"backArrow"),style:.plain,target:self,action:#selector(self.back))self.navigationItem.leftBarButtonItem=backButton这非常有效,我能够通过使用以下方式保持向后滑动以弹出ViewCont

swift - 值类型在多线程中真的安全吗?

Apple说“如果你使用值类型,你可以安全地跨线程传递值的副本而无需同步。”。但是我最近看到并发崩溃与苹果指南不一致。我看到了https://developer.apple.com/swift/blog/?id=10苹果的指南说“值类型在多线程中是安全的”所以我认为“值类型是原子的!”但最近我在下面的代码中看到并发崩溃。classClassB:NSObject{funcreadSomeValue(){print(classA.someValue)}letclassA=ClassA()}classClassA:NSObject{private(set)varsomeValue:Struc

EXC_BAD_ACCESS 中的 Swift 泛型方法

我对泛型和swift中的泛型方法很着迷。为什么这段使用Swift泛型方法的代码在调用method1时给出EXC_BAD_ACCESS?您可以使用Playground对其进行测试。importUIKitimportFoundationprotocolSomeProtocol{funcprintMe()}classSomeClass:SomeProtocol{letvalue:Stringinit(value:String){self.value=value}funcprintMe(){print("\(value)")}}classBaseClass{funcmethod1(_param

ios - 在 swift 4 中使用 NSSetUncaughtExceptionHandler

我正尝试在我的项目中使用全局错误处理,如下所示:funcapplication(_application:UIApplication,didFinishLaunchingWithOptionslaunchOptions:[UIApplicationLaunchOptionsKey:Any]?)->Bool{NSSetUncaughtExceptionHandler{(exception)inprint(exception)letmyView=UIView(frame:CGRect(x:0,y:0,width:UIScreen.main.bounds.width,height:UIScr

swift - 在 UIViewController 的 convenience init 中调用了什么初始化器?

我经常在UIViewController中使用convenienceinit来制作自定义初始化程序。但我不知道self.init()时调用的UIViewController的现有初始化器是什么。是不是publicinit(nibNamenibNameOrNil:String?,bundlenibBundleOrNil:Bundle?)?在UIViewController的convenienceinit中self.init()调用了什么?finalclassSampleViewController:UIViewController{privatevarcomponent:Componen

swift - Swift 的 Double 初始值设定项用于移位整数参数的类型推断问题

我正在尝试使用整数位移操作的结果来初始化Float或Double。传递的参数是一个整数文字,由一个无符号字节移位。据我了解Swift的类型推断,该参数应该是Int类型。但是,生成的浮点值是0.0。奇怪的是,只要我将参数表达式放在括号中,问题就消失了。letsomeByte=UInt8(16)print(Double(1 最佳答案 这看起来像是编译器中的错误。正如@Hamish所说,最新的大师解决了这个问题,我可以确认,因为我安装了Swift4.2和Swift5.0的工具链:使用Swift4.2工具链,行为如您所述:第一个打印输出0.

swift - DispatchGroup 通知 block 被提前调用

在我的应用程序中早期调用DispatchGroup的通知block时出现问题,并制作了这个playground示例进行实验。根据输出,有时它甚至在第一个.leave()之前被调用。感觉我错过了一些明显的东西,现在我已经看了太久了。lets=DispatchSemaphore(value:1)letdg=DispatchGroup()funcgo()->Void{foriin1...2{doWork(attemptNo:i,who:"Lily",secs:Double.random(in:1.0...5.0))doWork(attemptNo:i,who:"Emmie",secs:Dou