小编Qua*_*ees的帖子

如何在Swift 3中为for循环中修改的数组编写for循环?

所以,我有一个类似于这个的for循环:

for var i = 0; i < results.count ; i += 1 {
   if (results[i] < 5) {
      results.removeAtIndex(i)
      i -= 1
   }
}
Run Code Online (Sandbox Code Playgroud)

这曾经工作过.但当我将其更改为首选的Swift 3.0语法时:

for var i in 0..<results.count {
   if (results[i] < 5) {
      results.removeAtIndex(i)
      i -= 1
   }
}
Run Code Online (Sandbox Code Playgroud)

我得到一个数组IOOBE异常,因为它不会重新检查计数并继续直到原始results.count.

我该如何解决?它现在有效,但我不想在将来遇到麻烦.

arrays for-loop ios swift swift3

39
推荐指数
3
解决办法
9万
查看次数

如何在 Swift 中的 draw(_ rect: CGRect) 中绘制具有不同混合模式的 UILabel

所以我有一个UILabel被绘制在渐变图像(即UIImageView)之上的。它看起来有点像这样:

在此处输入图片说明

我正在尝试更改's函数中blendMode图形上下文的 ,以便它绘制标签但使用混合模式与背景混合。UILabeldraw(_ rect: CGRect)softLight

这是我想要的样子:

在此处输入图片说明

这是我在draw(_ rect: CGRect)函数中的代码:

override func draw(_ rect: CGRect) {
    // Drawing code
     if let context = UIGraphicsGetCurrentContext() {
        context.setBlendMode(.softLight)
        self.textColor.set()
        self.drawText(in: rect)
   }
 }
Run Code Online (Sandbox Code Playgroud)

此代码仅呈现顶部图片而不是混合版本。这不是我尝试过的全部,我尝试了很多其他的东西,但我只是不明白CGContext's 和draw特别是功能。

SO 上的大多数答案要么是旧的 Objective-c 并且已被弃用/损坏,要么是快速且过于复杂(例如使用 Metal)。我只想在我拥有的上下文中绘制文本并将上下文的混合模式设置为柔光。必须有一个简单的方法!

任何有关如何解决此问题的帮助将不胜感激。谢谢!

blending core-graphics cgcontext ios swift

5
推荐指数
1
解决办法
1638
查看次数

对整型常量表达式强制执行编译时最大值

我有一个像这样的模板类:

template<typename T, unsigned int size>
class Array 
{
public:
  static const unsigned int SIZE = size;
  // ...
private:
  T data[SIZE];
};
Run Code Online (Sandbox Code Playgroud)

有没有办法添加编译时检查,使 an 的大小Array<T,XXXX>永远不会超过某个值?

就像如果该值为512,则不应编译:

Array<int, 1000> arr;


C++ 化我的代码的想法对我来说是新的,所以我愿意接受任何指南或在线进一步学习来帮助解决这个问题,因为我什至不知道要谷歌搜索什么。我尝试过的一切似乎都还很遥远。

c++ templates class-template c++17 compile-time-type-checking

4
推荐指数
1
解决办法
81
查看次数

如何使用 Tensorflow 将训练好的模型转换为 Core ML

苹果今年在 iOS11 上引入了Core ML。有一个Core ML 工具可以将训练好的模型转换为 Core ML 格式 (.mlmodel)。

是否可以使用 Tensorflow 转换 Core ML 模型?如何?

ios tensorflow

3
推荐指数
1
解决办法
6337
查看次数

cancelPreviousPerformRequests似乎不适用于Swift 3.0

正如标题所述,由于某种原因,以下(简化)代码不起作用:

extension InputView: {

    func updateTable(text: String) {
            NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(loadPlaces(text:)), object: nil)
          //NSObject.cancelPreviousPerformRequests(withTarget: self)

            self.perform(#selector(loadPlaces(text:)), with: text, afterDelay: 0.5)

            prevSearch = inputField.text!;
        }

    //Private wrapper function
    @objc private func loadPlaces(text: String) {
        print("loading results for: \(text)")
       // locator?.searchTextHasChanged(text: text)
    }
}
Run Code Online (Sandbox Code Playgroud)

updateTable每当用户编辑一个UITextField调用时localPlaces,我就会调用,调用哪个调用调用google的在线位置API(注释掉)的函数.不幸的是,每次调用updateTable后都会调用loadPlaces中的打印行.从我的视觉检查来看,实际上打印报表实际上有延迟,但旧的通话不会取消.我试过看了很多StackOverflow线程,但是我找不到任何针对Swift 3的更新内容.我是否正在调用错误的内容?

PS.如果我改为使用注释掉的单参数,cancelPreviousPerformRequests.它的作用是出于某种原因.


编辑:我已经能够在一个单独的项目中复制此错误.所以我100%确定上面的代码是错误的.如果您想复制此错误,请打开一个新的iOS项目并将以下代码粘贴到默认值中ViewController:

class InputView: UIView {

    func updateTable(text: String) {
        NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(loadPlaces(text:)), object: nil)

        self.perform(#selector(loadPlaces(text:)), with: text, afterDelay: 0.5)

    }

    //Private wrapper …
Run Code Online (Sandbox Code Playgroud)

ios swift3

2
推荐指数
1
解决办法
1509
查看次数

在 Swift 中获取两个日期之间的百分比作为浮点数

所以我目前正在尝试添加一个功能,给定两个日期,它会告诉我我已经走了多远。

TLDR: 所以,假设我有一个日期 是 ,July 1st, 2017 20:00:00另一个日期是July 2nd, 2017 22:00:00,今天是July 2nd, 08:00:00,那么我将得到我已完成 46.17% 的结果。

我尝试这样做的方法是使用一个简单的公式:

进度=(当前时间-开始时间)/(结束时间-开始时间)

但是当放入代码中时,我可以减去两个日期,并得到差值DateComponent,但我不能除以两个DateComponent。这是我设置的代码,扩展名为 t

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

let startDate = formatter.date(from: "2017-07-01 20:00:00")
let endDate = formatter.date(from: "2017-07-02 22:00:00")
let currentDate = formatter.date(from: "2017-07-01 08:00:00")

let progress = (currentDate - startDate) / (endDate - startDate)



extension Date {
    static func - (date1: Date, date2: Date) -> DateComponents {
        let calender:Calendar …
Run Code Online (Sandbox Code Playgroud)

date swift

1
推荐指数
1
解决办法
1853
查看次数

是否可以经常访问NSUserDefaults/UserDefaults?

我有一个登录视图控制器,用户可以在其中输入他们的首选项,例如他是否要激活某些UI功能.

我将这些存储为getter和setter直接访问的变量UserDefaults,以下是其中一个示例:

class Preferences {
        static var likesSpaghetti : Bool {
            set (likesSpaghetti) {
                UserDefaults.standard.set(likesSpaghetti, forKey: "likesSpaghetti")
            }

            get {
                return UserDefaults.standard.bool(forKey: "likesSpaghetti")
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

因此,每当我想要设置其中任何一个时,我只需编写如下内容:

Preferences.likesSpaghetti = false

现在,我的问题是:每次用户轻拂开/关开关时我都可以设置这些变量,还是应该将首选项保持为局部变量,然后才设置:

Preferences.likesSpaghetti = spaghettiSwitch.isOn

当用户离开时loginViewController?每次访问都是UserDefault即时快速的吗?或是它是否滞后,应该仁慈地使用?

关闭这个问题后编辑:所以我学会了不要过早地优化,并且它可能在几十个元素的范围内.所以我应该没事.每次用户修改任何内容时我都会更新,以便我的代码更容易阅读和维护.

感谢大家!

nsuserdefaults ios swift swiftyuserdefaults

1
推荐指数
1
解决办法
412
查看次数

C++ - 使用equals运算符交换两个对象*而不使用*

所以我在一周前进行了一次编码访谈,以获得高级C++职位,其中的问题基本上是要求我交换一个名为的类的两个实例Line.这基本上只是一个容器std::vector<int>.但是equals运算符是私有的,所以我无法正常交换变量.它还有一个奇怪的未实现的功能,称为"交换"就在那里.没有实施或任何事情.过去一周,我一直在思考如何处理这个问题.我不是一个c ++专家,但我也不是一个完整的新手.然而,我没有提出任何有用的东西.它是否要求我继承该Line课程?操纵指针?我没有线索.

关闭和downvoting问题之前,请注意mainLine类是不可修改

这是我得到的代码:

#include <iostream>
#include <vector>

// Unmodifiable Code:
class Line {
    std::vector<int> people;
    void operator=(Line& other);
public:
    Line(std::vector<int> p) : people(p) {}

    void print_ids() {
        for (auto i = this->people.begin(); i != this->people.end(); ++i) {
            std::cout<<*i;
        }
    }

    void swap(Line& other);
};
// End Unmodifiable Code.

// THIS IS WHAT I HAD TO IMPLEMENT:
void switch_lines(Line& line1, Line& line2) {
    // TODO: This.
}

// Unmodifiable Code …
Run Code Online (Sandbox Code Playgroud)

c++

-2
推荐指数
1
解决办法
295
查看次数