将我的游乐场代码更改为Swift 3,Xcode建议更改
enum Error: ErrorType {
case NotFound
}
Run Code Online (Sandbox Code Playgroud)
至
enum Error: Error {
case NotFound
}
Run Code Online (Sandbox Code Playgroud)
但现在我得到标题错误,我不知道如何使枚举符合该协议.
我经常需要计算数值数组的均值和标准差.所以我为一些似乎有用的数字类型编写了一个小协议和扩展.如果我这样做有什么不妥,我只想反馈.具体来说,我想知道是否有更好的方法来检查类型是否可以转换为Double,以避免需要asDouble变量和init(_:Double)构造函数.
我知道允许算术的协议存在问题,但这似乎工作正常,使我无法将标准偏差函数放入需要它的类中.
protocol Numeric {
var asDouble: Double { get }
init(_: Double)
}
extension Int: Numeric {var asDouble: Double { get {return Double(self)}}}
extension Float: Numeric {var asDouble: Double { get {return Double(self)}}}
extension Double: Numeric {var asDouble: Double { get {return Double(self)}}}
extension CGFloat: Numeric {var asDouble: Double { get {return Double(self)}}}
extension Array where Element: Numeric {
var mean : Element { get { return Element(self.reduce(0, combine: {$0.asDouble + $1.asDouble}) / Double(self.count))}}
var sd : …Run Code Online (Sandbox Code Playgroud) 我将数据从表视图控制器传递到详细信息视图.我尝试indexPath.row直接在我的prepareForSegue方法中使用,但它显示错误
使用未解析的标识符'indexPath'
因此,在搜索网络后,我设置了indexOfSelectedPerson赋值的变量indexPath.row.我在模拟器中运行应用程序时的问题是prepareForSegue获取初始值indexOfSelectedPerson(0),然后在我单击它之后获取所选行的值.因此,当我点击模拟器中的后退按钮并选择另一行时,详细视图会显示我上一次选择的行的信息.
import UIKit
class MasterTableViewController: UITableViewController {
var people = []
var indexOfSelectedPerson = 0
override func viewDidLoad() {
super.viewDidLoad()
people = ["Bob", "Doug", "Jill"]
}
override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
return 1
}
override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
return people.count
}
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell = tableView!.dequeueReusableCellWithIdentifier("personCell", forIndexPath: indexPath) as UITableViewCell
cell.text …Run Code Online (Sandbox Code Playgroud) 我有几个问题.如何将数据(我在Alamofire请求完成后得到的)传递给TabBarController的一个子节点?
我遇到的第一个问题是我无法覆盖登录操作中的func prepareForSegue(当点击按钮时),它说我只能覆盖类成员.但是,如果我把功能放在IBAction之外,那么我将不会发送我需要的数据.
第二个问题是,当我将覆盖的函数放在IBAction之外时,代码看起来像这样:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
let homeVC = segue.destinationViewController as HomeViewController
homeVC.templateForCell = templates
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到了错误:
无法将'UITabBarController'类型的值转换为HomeViewController'
(HomeViewController是我的目标视图,我应该从Alamofire传递数据).
我打印出一个我不知道的数字.在大多数情况下,数字是完整的或具有尾随.5.在某些情况下,数字以.25或.75结尾,很少这个数字到千分之一的地方.我如何具体检测最后一个案例?现在我的代码检测到一个整数(0位小数),正好是.5(1位小数),然后在所有其他方案中恢复到2个小数点,但是当它需要时我需要转到3.
class func getFormattedNumber(number: Float) -> NSString {
var formattedNumber = NSString()
// Use the absolute value so it works even if number is negative
if (abs(number % 2) == 0) || (abs(number % 2) == 1) { // Whole number, even or odd
formattedNumber = NSString(format: "%.0f", number)
}
else if (abs(number % 2) == 0.5) || (abs(number % 2) == 1.5) {
formattedNumber = NSString(format: "%.1f", number)
}
else {
formattedNumber = NSString(format: "%.2f", number)
}
return formattedNumber …Run Code Online (Sandbox Code Playgroud) 我们如何使用ARCamera或可以访问前置摄像头图像,ARSCNView是否可以ARSCNView像摄像头一样进行录制?
我的游戏应该在60年代后停止.但我的计时器代码没有任何反应.
var timer = NSTimer()
var counter:Int = 60
var labelCounter:SKLabelNode = SKLabelNode()
Run Code Online (Sandbox Code Playgroud)
这是我的GameScene类中的代码:
func startTimer()
{
timer = NSTimer.scheduledTimerWithTimeInterval(1.0
, target: self, selector: Selector("updateTimer:"), userInfo: nil, repeats: true)
}
func updateTimer(dt:NSTimer)
{
counter--
if counter == 0 {
timer.invalidate()
removeCountDownTimerView()
} else{
labelCounter.text = "\(counter)"
}
}
func removeCountDownTimerView()
{
scene.view.paused = true
}
Run Code Online (Sandbox Code Playgroud)
感谢您的见解 :-)
我想每天午夜更新状态。但计时器是按时间间隔的。如何按天设置间隔
var timer = Timer()
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)
// called every time interval from the timer
func timerAction() {
}
Run Code Online (Sandbox Code Playgroud) 我正在阅读另一个SO问题,Swift do-try-catch语法.在他的回答中,rickster为OP的自定义类创建了一个扩展.Konrad77评论说这是"保持代码清洁的绝佳方式".我尊重他们的知识,这让我相信我在自己的代码中错过了一点.
是否还有其他好处(除了清洁度)或为我创建的课程创建扩展的原因?我可以直接将相同的功能放入类中.如果我是唯一一个使用该课程的人,或者其他人将访问它,答案是否会改变?
我在理解或使用 Dispatchgroup 时遇到问题。我已经阅读了很多关于它们的内容,但是大多数示例/文档都非常模糊或与我想要做的不一样,但是每次我提到我的问题时,每个人都会说“使用调度组!”。
这是我想要做的(注意:顺序是至关重要的):
重复两次(总共 3 个命令,总共 3 个不同的响应)。
我的代码:
func tPodInitialSetUp()
{
print ("* * * * * BEGIN SET-UP * * * * *")
let setupDispatchGroup = DispatchGroup()
setupDispatchGroup.enter()
self.writeValue(command: Data(CommandModeCmd)) //231: Put t-Pod in command mode, burst mode is OFF returns OK
setupDispatchGroup.leave()
setupDispatchGroup.wait()
setupDispatchGroup.enter()
deviceConnected?.readValue(for: deviceConnectedCh1n2Char!)
print("Sent command 231: returned: \(receivedString1)")
if receivedString1.lowercased() == "ok"
{
print("t-Pod burst mode is OFF")
}
setupDispatchGroup.leave()
setupDispatchGroup.wait()
setupDispatchGroup.enter()
self.writeValue(command: Data(loadProbeCalCmd)) …Run Code Online (Sandbox Code Playgroud)