2018-03-14 09:31:16 qq_35612929 阅读数 12562

循环语句

OC中常用的普通for循环 for(int i=0;i<10;i++){}在Swift3.0已经移除掉了,现在Swift用的for in 循环很具有Swift特色,举例如下:

for i in 0...10 {
//0...10表示包含头尾的0到10之间所有的整数
//0..<10表示包含头不包含尾的0到9之间所有的整数
//0...10这种条件区间内不能出现任何的空格
} 
//如果不关心循环本身的索引,可以直接用下划线如下
for _ in 0...10 {
}
//在遍历数组的时候,Swift还提供了一种特别方便的方式(利用元祖)
for (index,value) in array.enumerated() {
//index是下标,value是值
//这样使得遍历数组能写的更加简洁优雅
}
2018-03-12 22:05:23 u014760573 阅读数 2880

OC中的for循环写法:

for (int i = 0;i < 100;i++) {
        NSLog(@"i=%zd",i);
    }

Swift中的for循环写法:

let a = 100;
for i in 0 ..< a {
    print("a=\(i)");
}

Swift中for循环不需要i的写法:

let a = 100;
for _ in 0..<a {
    print("a=\(a)");
}

2017-10-10 15:37:47 thoris 阅读数 599


使用swift4.0整合Unity出现

[<SwiftWithUnity.AppDelegate 0x15564a30> valueForUndefinedKey:]: this class is not key value coding-compliant for the key unity.'


在对应属性前加@objc 即可。或者调回swift3.2版本

2018-02-06 11:08:57 cpsoft 阅读数 74

这个问题折腾了我一个礼拜,加上网上OSX编程的资料本来就少,真是搞死我了。

原来用swift 4.0编译NSTableView binding NSArrayController的时候,一运行就报:

this class is not key value coding-compliant for the key dataArray.


然后我改成swift 3.2编译就OK了。

另外一个解决方案是在你的变量前面加上dynamic和@objc,即KVO模式:

@objc dynamicvar employees:[Employee] = []


2016-12-14 11:45:58 sinat_20037505 阅读数 16113

        /**

         for循环

         

         for 初始化语句; 条件; 递增语句

         {

            // 执行指令

         }

         

         */

        

        var sum = 0

        var i = 0

        

     

        /**

         C-style for statement has been removed in Swift 3

         C语言的这种for 循环已经被 swift3.0 移除了

         */

//        for var i = 0; i <= 10; i = i+1

//        {

//            sum += i

//        }

        

        // ,退出条件永远为假

//        for ;;

//        {

//            print("hello world")

//        }

        

        

        // 这个不对

//        for (i, in 10 ){

//            sum += i

//        }

        

        for i in 0...10

        {

            sum += i

        }


        print("--------->")

        print(sum);

        

        

        /**

         Swift 3.0 版本将会去掉沿用已经的 C 风格循环语法, 又是向现代开发语言的一次迈进,

         咱们就来看看没了 C 风格循环我们还有什么选择, 

         看过之后你会不会感觉 C 风格循环在 Swift 中确实有点多余呢?

        

         关于 C 风格循环, 不我们过多介绍了, 就是类似这样的语句:

         let numberList = [1, 2, 3, 4, 5]

         for var i = 0; i < numberList.count; i++ {

         

         }

         

         如今这样的语法在新版本的 Swift 中即将成为历史了,

         C 风格的循环语法可能是大家最熟悉的, 大家会不会觉得突然去掉这个语法有些不适应呢? 

         咱们再来看看 Swift 3 中的替代方案。

         */

        

        


        /**

         for .. in 语法

         第一个替代方案, 我们可以使用 for .. in 这样的语法:

         */

        let numberList = [1,2,3,4,5]

        var result = ""

        for num in numberList {

            result += "\(num) "

        }

        

        print("--------->")

        print("result==\(result)");


        

        

        

        

        /**

         如果我们想知道每次遍历的索引怎么办呢, 还有一种方法:

         num.offset num.element 分别代表对应的索引和元素

         

         enumerate 函数其实就是对 numberList 数组做了一个变换,

         原来它是一个 Int 类型的数组,经过变换后,成为了 (Int, Int) 元组类型的数组

         num 是一个元组。

         */

        for num in numberList.enumerated() {

            print("num.offset==\(num.offset)")

            print("num.element==\(num.element)")

//            result += "[\(num.index)]\(num.element) "

        }



        

        

        

        /**

         上面的num 相当于 (index, value)

         */

        for (index, value) in numberList.enumerated()

        {

            // 这样子遍历,可以得到数组的值和下标

            print("index:\(index) = \(value)")

        }

        

        

        /**

         

         是不是这么回事呢? 查看 enumerate 方法的文档后, 看到它的定义是这样的:

         func enumerate() -> EnumerateSequence<array<element>></array<element>


         

         比我们想象的要复杂些, EnumerateSequence 是个什么鬼, 让我们再来看看它的文档定义:

         

         The SequenceType returned by enumerate(). EnumerateSequence is a sequence of pairs (n, x), where ns are consecutive Ints starting at zero, and xs are the elements of a Base SequenceType

         

         仔细看下, 其实跟我们理解的还是差不多的, 它只不过是对集合类的一个集成, 这个集合每一项是一个元组 (n, x) , n 代表索引, x 代表数组元素。

         */



        


        /**

         那么,我们还可以做点更有意思的事情:

         调用 enumerate 之后再调用 reverse 方法, 我们就可以对一个数组进行反向遍历。

         

         SequenceType

         http://swiftdoc.org/v2.2/protocol/SequenceType

         */

        for (index, item) in numberList.enumerated().reversed() {

            print("index==\(index), \(item)")

        }

        


        print("--------------->")

        for (index, item) in numberList.enumerated().filter({ (index, item) in index % 2 == 0})

        {

            print("index==\(index), \(item)")

        }

        

        


        

        

        

        /**

         区间(Range)循环

         除了刚才咱们说的这些, Swift 还提供了更方便的循环语法, 叫做 Range 循环。 比如这样:

         */

        var rs = ""

        for i in 0...10 {

            rs += "\(i)"

        }

        

        print("--------------->")

        print(rs)

    

        /**

         这个语句会输出 0 10 之间的所有数字,

         0…10 这个表示 Range 区间的范围。 

         当然,对于我们刚才的数组遍历来说, 一般数组索引都是数组长度减去 1

         用这个区间处理起来就会比较麻烦, 不过好在 Swift 给我们提供了另外一种 Range 方法:


         */

        for i in 0...(numberList.count-1)

        {

            print("i===\(i)")

        }

        

        


swift循环 for in 语句

阅读数 1798

Swift发展记录

阅读数 337

没有更多推荐了,返回首页