2016-02-01 3 views
0
import Foundation 
import Swift 

var buff = [UInt8](count: 256, repeatedValue: 0) 
var index: UInt8 
index = 0 

for var i = 0; i < 256; ++i { 
buff[i] = index; 
++index 
} 

Когда я увеличиваю индекс за пределами цикла for, он отлично работает. Но когда я увеличиваем индекс внутри для цикла, как в приведенном выше коде, я получаю следующее сообщение об ошибкеПриращение переменной типа UInt8 внутри цикла for

1 
0 swift     0x000000010ea31fbb llvm::sys::PrintStackTrace(__sFILE*) + 43 
1 swift     0x000000010ea326fb SignalHandler(int) + 379 
2 libsystem_platform.dylib 0x00007fff832c3eaa _sigtramp + 26 
3 libsystem_platform.dylib 000000000000000000 _sigtramp + 2094252400 
4 swift     0x000000010cfa09bf llvm::MCJIT::runFunction(llvm::Function*, std::__1::vector<llvm::GenericValue, std::__1::allocator<llvm::GenericValue> > const&) + 271 
5 swift     0x000000010cfa30f6 llvm::ExecutionEngine::runFunctionAsMain(llvm::Function*, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, char const* const*) + 1190 
6 swift     0x000000010ce34d8c swift::RunImmediately(swift::CompilerInstance&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, swift::IRGenOptions&, swift::SILOptions const&) + 2188 
7 swift     0x000000010cb23151 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&) + 13425 
8 swift     0x000000010cb1fad3 frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 2691 
9 swift     0x000000010cb1c154 main + 2324 
10 libdyld.dylib   0x00007fff975535ad start + 1 
11 libdyld.dylib   0x000000000000000c start + 1756023392 
Stack dump: 
0. Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -interpret File.swift -target x86_64-apple-darwin15.2.0 -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -color-diagnostics -module-name File 
Illegal instruction: 4 

Кто-нибудь есть какие-либо идеи, почему это происходит?

+2

проблемой является последней петлей вы пытаетесь увеличить его более чем 255 –

ответ

0

Проблема там в последнем цикле, когда вы пытаетесь, чтобы увеличить его переполняет ваш UInt8.max 255.

У вас есть много различных вариантов, чтобы сделать то, что вы хотите:

Чтобы сохранить петлю вы нужно будет начать итерации из второго элемента в массиве и увеличивать свой вар в то же время вы назначаете его на бафф, чтобы предотвратить переполнение:

for var i = 1; i < 256; ++i { 
    buff[i] = ++index 
} 

или использовать for in цикл для перебора ваших индексов массива:

for i in buff.indices { 
    buff[i] = UInt8(i) 
} 

Или вы можете просто инициализировать массив с диапазоном:

let buff = [UInt8](0...255) 
Смежные вопросы